2011-08-28 23 views
8

Tôi đang cố gắng tạo chức năng 'thẻ' cho phép người dùng "gắn thẻ" các mục mà họ quan tâm. Đây là mô hình của tôiRails 3 - Cách bạn tạo một bản ghi mới từ link_to

class tag 
    belongs_to :user 
    belongs_to :item 
end 

Bảng DB tương ứng có cần thiết :user_id:item_id lĩnh vực.

Trong danh sách :items Tôi muốn một liên kết bên cạnh mỗi :item cho phép người dùng gắn thẻ :item. Vì tôi biết số :user_id và số :item_id, tôi muốn tạo bản ghi :tag mới, đặt trường id và lưu bản ghi - tất cả đều không có sự can thiệp của người dùng. Tôi đã thử các cuộc gọi sau đây để link_to, nhưng không có hồ sơ được lưu trong cơ sở dữ liệu:

<%= link_to 'Tag it!', {:controller => "tracks", 
         :method => :post, 
         :action => "create"}, 
         :user_id => current_user.id, 
         :item_id => item.id %> 

(Mã này là trong vòng một:. @item.each do |item| tuyên bố, vì vậy item.id là hợp lệ)

link_to Cuộc gọi này tạo ra URL này:

http://localhost:3000/tags?method=post&tag_id=7&user_id=1 

Không tạo bản ghi Tag trong cơ sở dữ liệu. Dưới đây là :create hành động của tôi trong tags_controller

def create 
    @tag = Tag.new 
    @tag.user_id = params[:user_id] 
    @tag.tag_id = params[:tag_id] 
    @tag.save 
    end 

Làm thế nào tôi có thể nhận được link_to để tạo và lưu một kỷ lục thẻ mới?

Trả lời

14

Thực tế là URL được tạo có phương thức là tham số ngụ ý rằng nó đang thực hiện GET và không phải POST.

Các link_to chữ ký bạn phải đang sử dụng là link_to(body, url_options = {}, html_options = {})

<%= link_to 'Tag it!', {:controller => "item", 
         :action => "create", 
         :user_id => current_user.id, 
         :item_id => item.id}, 
         :method => "post" %> 

: Phương pháp phải được chuyển vào html_options và nghỉ ngơi để url_options. Điều này sẽ làm việc.

+0

Cảm ơn! Nó hoạt động tuyệt vời với bản sửa lỗi của bạn. Hiển thị link_to chữ ký trong câu trả lời của bạn thực sự đã giúp tôi cuối cùng hiểu những gì đang xảy ra. Nhiều đánh giá cao. –

+1

Chỉ cần một bình luận nhanh. Trong giá trị băm url_options giá trị của khóa điều khiển phải là "mục" chứ không phải "mục". Nó sẽ cung cấp cho bạn một lỗi định tuyến ActionController khi cố gắng hiển thị liên kết. – icantbecool

+0

@dexter, điều gì xảy ra nếu liên kết nằm ngoài ứng dụng, chẳng hạn như trong email chẳng hạn? Trường hợp sử dụng của tôi là dành cho RSVP. Tôi muốn tạo một RSVP mới trực tiếp từ liên kết email, nhưng tôi muốn ở lại RESTful. – Mohamad

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