所以,我是Ruby on Rails的新手,整个事情对我来说听起来仍然像中国人。如果这是一个愚蠢的问题,请原谅,但我正在尝试在我的应用程序上创建一个新的按钮,让我可以复制东西。
在我的表格上,我有:
%span.btn.btn-mini.btn-inverse= link_to copy_image, copy_campaign_signal_processor_item_path(@campaign, @processor, item) ,data: { toggle:"modal",target: "#myModal"}, remote: true这很好用,并且为我创建了一个按钮。然后,在routes.rb中,我有:
resources :signal_processors, exclude: [:index, :new, :create], controller: 'processors' do
member do
get :modify, :action => :edit, :force_schema_update => true
end
resources :items do
member do
get :copy
end
end最后,在items_controller.rb中,我有:
def copy
@overlay_title = "Copy #{@processor.item_name}"
@processor.properties.each do |property|
unless @item.property_values.collect{|a| a.property_id}.index(property.id)
@item.property_values << SignalProcessor::PropertyValue.new(property: property)
end
end
respond_to do |format|
format.js
end
end问题是,由于某些原因,item似乎没有传递给items_controller.rb中的copy函数,所以每次我单击copy按钮时,我都会收到错误消息:
nil的undefined methodproperty_values‘:NilClass`
对于行:
unless @item.property_values.collect{|a| a.property_id}.index(property.id)
我做错了什么?为什么item没有通过?
发布于 2013-06-16 05:18:22
首先,您需要修改表单视图以传递Item id,您可以使用该id在控制器中查找相应的模型对象:
%span.btn.btn-mini.btn-inverse= link_to copy_image, copy_campaign_signal_processor_item_path(@campaign, @processor, item.id) ,data: { toggle:"modal",target: "#myModal"}, remote: true在您的表单中,您将三个参数传递给您的路径,但是您尚未在您的路径中命名它们。您可以命名将在:items资源块中传递给copy路由的参数:
resources :items do
member do
get 'copy/:campaign/:processor/:item_id', :action => 'copy'
end
end然后,在您的控制器中,您可以通过ID查找Item:
def copy
@item = Item.find(params[:item_id])
...
endhttps://stackoverflow.com/questions/17127899
复制相似问题