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

时间:2011-08-28 03:46:38

标签: ruby-on-rails-3 belongs-to 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记录。以下是:create

中的tags_controller操作
 def create
    @tag = Tag.new
    @tag.user_id = params[:user_id]
    @tag.tag_id = params[:tag_id]
    @tag.save
  end

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

1 个答案:

答案 0 :(得分: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。这应该有用。