我正在尝试创建一个“标记”功能,允许用户“标记”他们感兴趣的项目。这是我的模特
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来创建和保存新的标签记录?
答案 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。这应该有用。