On Viernes, 4 de Septiembre de 2009 22:08:49 Chris Drappier escribió:
> Hi All,
>
> I'm trying to override the update action in a controller because I already
> have a customized action there. The problem is that activescaffold is still
> trying to call its own update action. how can I fix this?

It should work. What version are you using? I have tried with rails 2.3 and 
master branch and overriding update works. You can try to exclude update 
action if you don't use anything from that module.


>
> here's my controller :
>
> class SearchesController < ApplicationController
>     SEARCH_DEFAULT_COLUMNS = [:title, :join_operator, :search_parameters,
>
> :created_at, :updated_at]
>
>     skip_before_filter :fix_nested_attribute_params
>     layout 'no_left_nav'
>     before_filter :get_results
>     before_filter :get_anchor, :only => :show
>     before_filter :update_as_config
>     active_scaffold :search do |config|
>         config.create.link = false
>         config.search.link = false
>         config.list.columns = SEARCH_DEFAULT_COLUMNS
>         config.show.link.inline = false
>         config.update.link = false
>         config.label = "My Searches"
>     end
>
>     #you must pass either a search_id or a search_class in order to use
> this action
>     def update
>         if params[:search_id]
>             @search = Search.find(params[:search_id])
>         elsif params[:id]
>             @search = Search.find(params[:id])
>         elsif params[:search_class]
>             @search =
> @session_user.working_search(params[:search_class].classify.constantize)
>         end
>         @title = "Edit Search '#[email protected]? ? @search.title.titleize :
> @search.search_class_name.titleize}'"
>         if params[:search]
>             @search.update_from_controller(params)
>         end
>         respond_to do |format|
>         format.html{redirect_to :back}
>         format.js {
>             render :update do |page|
>                 page.replace "search_results", :partial =>
> 'searches/results', :object => @search.results(params)
>             end
>         }
>         end
>     end
>
>     private
>
>     def update_as_config
>         active_scaffold_config.label = "My #{params[:search_class_name] ?
> params[:search_class_name] + " " : ''}Searches"
>         active_scaffold_config.list.columns << :search_class_name unless
> params[:search_class_name]
>     end
>
>     def conditions_for_collection
>         "user_id = #{current_user.id} #{params[:search_class_name] ? "and
> search_class_name = '#{params[:search_class_name]}'" : ""}"
>     end
>
>   def get_results
>     @results = @search.results(params)
>   end
>
>     #this pulls in a polymorphic item and sets it as the anchor.
>     #you should not pass multiple *_id params to the show action here
>     #because you will get unexpected behavior.
>     def get_anchor
>         params.each do |name, value|
>             if name =~ /(.+)_id$/
>                 @anchor = $1.classify.constantize.find(value)
>                 instance_variable_set("@#{$1}", @anchor)
>             end
>         end
>         nil
>     end
> end
>
> here's the request :
>
> Processing SearchesController#update (for 127.0.0.1 at 2009-09-04 15:05:26)
> [PUT]
>   Parameters: {"search"=>{"title"=>"", "join_operator"=>"OR", "save"=>"0"},
> "search_parameters"=>{"512"=>{"characteristic_id"=>"146",
> "selected_value"=>"", "selected_operator"=>"NOT BLANK"},
> "242"=>{"characteristic_id"=>"25", "selected_value"=>["42"],
> "selected_operator"=>"="}, "509"=>{"characteristic_id"=>"143",
> "selected_value"=>"oeuoe", "selected_operator"=>"NOT BLANK"},
> "510"=>{"characteristic_id"=>"144", "selected_value"=>"",
> "selected_operator"=>"NOT BLANK"}, "511"=>{"characteristic_id"=>"145",
> "selected_value"=>"", "selected_operator"=>"NOT BLANK"}}, "commit"=>"Find",
> "authenticity_token"=>"tsAzpjdAnZdTFLZN+2OtTpUrFJ12V1m17dFjBN38sSs=",
> "id"=>"1"}
>
> here's the error :
>
> NoMethodError in SearchesController#update
>
> You have a nil object when you didn't expect it!
> You might have expected an instance of Array.
> The error occurred while evaluating nil.each
>
> /storage/daisi/branches/demo/vendor/plugins/active_scaffold/lib/active_scaf
>fold/attribute_params.rb:42:in `update_record_from_params'
> /storage/daisi/branches/demo/vendor/plugins/active_scaffold/lib/active_scaf
>fold/actions/update.rb:81:in `do_update'
> /opt/ruby-enterprise-1.8.6-20090610/lib/ruby/gems/1.8/gems/activerecord-2.3
>.2/lib/active_record/connection_adapters/abstract/database_statements.rb:136
>:in `transaction'
> /opt/ruby-enterprise-1.8.6-20090610/lib/ruby/gems/1.8/gems/activerecord-2.3
>.2/lib/active_record/transactions.rb:182:in `transaction'
>
> I just put the first couple of lines in the trace that show the
> do_update being called. I didn't think the rest of it would be
> relevant here
>
> plz halp!
>
> -C
> /storage/daisi/branches/demo/vendor/plugins/active_scaffold/lib/active_scaf
>fold/actions/update.rb:80:in `do_update'
>
> 
-- 
Sergio Cambra .:: entreCables S.L. ::.
Mariana Pineda 23, 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"ActiveScaffold : Ruby on Rails plugin" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/activescaffold?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to