有没有人知道使用带有best_in_place gem的嵌套资源是否可能(如果是这样,语法是什么)?
我的routes.rb看起来像这样
resources :users do
resources :goals
end
我想修改目标的:description
字段,但我的视图中的代码
<%= best_in_place [@user, @goal], :description %>
给出NoMethodError说
undefined method `description' for #<Array:0x20e0d28>
使用
<%= best_in_place @goal, :description %>
还给我一个未定义的方法错误,因为没有goal_path
我可以让gem在@user(非嵌套资源)字段中正常工作。
我正在运行Rails 3.1.1,Ruby 1.9.2,best_in_place 1.0.4
答案 0 :(得分:20)
我明白了。
我需要在调用中设置path
选项,如此
<%= best_in_place @goal, :description, :path => user_goal_path %>
它现在就像一个冠军!
答案 1 :(得分:10)
将路径和对象添加到路径中:
<%= best_in_place @goal, :description, :path => user_goal_path(@user,@goal) %>
bknoles的简单路径解决方案对我来说不起作用。
答案 2 :(得分:4)
现在不推荐使用上述方法。
根据最新文档使用“:url”而不是“:path”,如下例所示
<%= best_in_place @goal, :description, :url => user_goal_path %>
干杯!
答案 3 :(得分:1)
谢谢你,@ bknoles。你的答案肯定帮助我达到了我自己的类似解决方案。这是我的实施:
#widget.rb
class Widget < ActiveRecord::Base
validates_presence_of :name
has_many :gadgets
attr_accessible :name, :description
end
#gadget.rb
class Gadget < ActiveRecord::Base
belongs_to :widget
attr_accessible :name, :widget_id, :id
end
#gadgets_controller.rb
def update
@gadget=@widget.gadgets.find(params[:id])
if @gadget.update_attributes(params[:gadget])
respond_to do |format|
format.html
format.json { respond_with_bip(@gadget) }
end
else
respond_to do |format|
format.html { render :action => "edit" }
format.json { respond_with_bip(@gadget) }
end
end
end
#views/gadgets/_gadget.html.haml
%tr{ :name => "gadget_", :id => gadget.id }
%td= gadget.created_at.localtime.strftime("%B %d, %l:%M%p")
%td.big=best_in_place gadget, :name, :path => [@widget, gadget]
%td.delete{:style => 'text-align:center;'}
=check_box_tag "gadget_ids[]", gadget.id, false, :class => "checkbox"
如果您想查看更多代码,可以在github上签出整个项目。
https://github.com/hernamesbarbara/ajax-rails-full-crud
最佳, 奥斯汀