Rails 3 - 如何从link_to创建新记录

Don*_*ham 8 link-to belongs-to ruby-on-rails-3

我正在尝试创建一个"标记"功能,允许用户"标记"他们感兴趣的项目.这是我的模特

class tag
  belongs_to :user
  belongs_to :item
end
Run Code Online (Sandbox Code Playgroud)

相应的DB表具有必要的: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 %>
Run Code Online (Sandbox Code Playgroud)

(此代码位于: @item.each do |item| 语句中,因此item.id有效.)

link_to调用创建此URL:

http://localhost:3000/tags?method=post&tag_id=7&user_id=1
Run Code Online (Sandbox Code Playgroud)

哪个不会Tag在数据库中创建记录.这是我的:create行动tags_controller

 def create
    @tag = Tag.new
    @tag.user_id = params[:user_id]
    @tag.tag_id = params[:tag_id]
    @tag.save
  end
Run Code Online (Sandbox Code Playgroud)

如何获取link_to来创建和保存新的标签记录?

dex*_*ter 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" %>
Run Code Online (Sandbox Code Playgroud)

:方法应传递给html_options并休息到url_options.这应该工作.