15

有谁知道将嵌套资源与 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

4

4 回答 4

20

我想到了。

我需要path像这样在通话中设置选项

<%= best_in_place @goal, :description, :path => user_goal_path %>

它现在就像一个冠军!

于 2012-01-09T02:08:57.037 回答
10

将路径和对象添加到路径:

<%= best_in_place @goal, :description, :path => user_goal_path(@user,@goal) %> 

不知何故,bknoles 的简单路径解决方案对我不起作用。

于 2013-02-19T10:06:20.147 回答
4

现在不推荐使用上述方法。

根据最新的文档使用“:url”而不是“:path”,如下例所示

<%= best_in_place @goal, :description, :url => user_goal_path %>

干杯!

于 2016-10-06T09:49:11.227 回答
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

最好的,奥斯汀

于 2012-04-19T19:01:37.407 回答