2012-01-08 38 views
15

Có ai biết nếu có thể (và, nếu vậy, cú pháp là gì) để sử dụng tài nguyên lồng nhau với đá quý best_in_place?Rails best_in_place đá quý với tài nguyên lồng nhau

routes.rb của tôi trông giống như sau

resources :users do 
    resources :goals 
end 

Tôi muốn chỉnh sửa :description lĩnh vực mục tiêu, nhưng mã theo quan điểm của tôi cho

<%= best_in_place [@user, @goal], :description %> 

đưa ra một NoMethodError nói

undefined method `description' for #<Array:0x20e0d28> 

Sử dụng

<%= best_in_place @goal, :description %> 

cho tôi một lỗi không xác định phương pháp cũng vì không có goal_path

Tôi có thể lấy đá quý để làm việc cho @user (tài nguyên không lồng nhau) lĩnh vực không có vấn đề.

Tôi đang chạy Rails 3.1.1, Ruby 1.9.2, best_in_place 1.0.4

Trả lời

19

Tôi đã tìm ra.

tôi cần thiết để thiết lập các tùy chọn path trong cuộc gọi như vậy

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

Nó hoạt động như một nhà vô địch bây giờ!

+0

bạn có thể hỗ trợ, tôi có một vấn đề tương tự: http://stackoverflow.com/questions/30090219/best-in-place-building-exotic-method-after-creation – Sauron

1

Cảm ơn bạn, @bknoles. Câu trả lời của bạn chắc chắn đã giúp tôi đạt được một giải pháp tương tự của riêng tôi. Đây là triển khai của tôi:

#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 
    @[email protected](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" 

Bạn có thể thanh toán toàn bộ dự án trên github nếu bạn muốn xem thêm mã.

https://github.com/hernamesbarbara/ajax-rails-full-crud

nhất, Austin

10

Thêm đường dẫn và các đối tượng đến đường dẫn:

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

Bằng cách nào đó giải pháp con đường đơn giản của bknoles không làm việc cho tôi.

+0

Cũng làm việc kỳ diệu. Cảm ơn bạn đời. – Galaxy

4

Phương pháp trên không được chấp nhận.

Theo sử dụng Tài liệu mới nhất ": url" thay vì ": đường dẫn" như dưới đây trong ví dụ

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

Cheers!

Các vấn đề liên quan