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
调用创建此 URL:
http://localhost:3000/tags?method=post&tag_id=7&user_id=1
它不会在数据库中创建 Tag
记录。这是我在 tags_controller
中的 :create
操作
def create
@tag = Tag.new
@tag.user_id = params[:user_id]
@tag.tag_id = params[:tag_id]
@tag.save
end
如何让 link_to 创建并保存新的标签记录?
I'm trying to create a 'tag' functionality which allows a user to "tag" items in which they are interested. Here is my model
class tag
belongs_to :user
belongs_to :item
end
The corresponding DB table has the necessary :user_id
and :item_id
fields.
In the list of :items
I want a link next to each :item
that allows the user to tag the :item
. Since I know the :user_id
and the :item_id
, I want to create a new :tag
record, set the id fields, and save the record - all with no user intervention. I tried the following call to link_to
, but no record is saved in the database:
<%= link_to 'Tag it!', {:controller => "tracks",
:method => :post,
:action => "create"},
:user_id => current_user.id,
:item_id => item.id %>
(This code is within an: @item.each do |item|
statement, so item.id is valid.)
This link_to
call creates this URL:
http://localhost:3000/tags?method=post&tag_id=7&user_id=1
Which does not create a Tag
record in the database. Here is my :create
action in the tags_controller
def create
@tag = Tag.new
@tag.user_id = params[:user_id]
@tag.tag_id = params[:tag_id]
@tag.save
end
How can I get link_to to create and save a new tag record?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
生成的 URL 将方法作为参数这一事实意味着它正在执行 GET 而不是 POST。
您必须使用的 link_to 签名是
link_to(body, url_options = {}, html_options = {})
:method 应传递给 html_options,其余部分传递给 url_options。这应该有效。
The very fact that the generated URL has method as parameter implies it's doing a GET and not POST.
The link_to signature you must be using is
link_to(body, url_options = {}, html_options = {})
:method should be passed to html_options and rest to url_options. This should work.