2011-08-28 101 views
8

我試圖創建一個'標記'功能,它允許用戶「標記」他們感興趣的項目。這裏是我的模型Rails 3 - 你如何創建一個新的記錄從link_to

class tag 
    belongs_to :user 
    belongs_to :item 
end 

相應的數據庫表有必要:user_id:item_id領域。

:items的列表中,我希望每個:item旁邊的鏈接都允許用戶標記:item。由於我知道:user_id:item_id,我想創建一個新的:tag記錄,設置ID字段並保存記錄 - 所有這些都不需要用戶干預。我嘗試了以下調用link_to,但沒有記錄在數據庫中保存:

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

(此代碼是一個內:@item.each do |item|語句,所以item.id有效)

link_to調用創建此網址:

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

這不會在數據庫中創建Tag記錄。下面是我在tags_controller

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

我怎樣才能得到的link_to創建並保存新的標籤記錄:create行動?

回答

14

事實上,生成的URL有方法作爲參數意味着它正在做一個GET,而不是POST。

您必須使用的link_to簽名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" %> 

:方法應該傳遞給html_options和休息,以url_options。這應該工作。

+0

謝謝!它適用於您的修復。在回答中顯示link_to簽名確實幫助我最終了解發生了什麼。非常感激。 –

+1

只是一個快速的評論。在url_options散列中,控制器鍵的值應該是「items」而不是「item」。嘗試顯示鏈接時,它會給你一個ActionController路由錯誤。 – icantbecool

+0

@dexter,如果鏈接不在應用程序之外,例如在電子郵件中會發生什麼情況?我的使用案例是針對RSVP的。我想直接從電子郵件鏈接創建一個新的RSVP,但我想保持RESTful。 – Mohamad

相關問題