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

发布于 2024-12-01 18:43:26 字数 1209 浏览 0 评论 0原文

我正在尝试创建一个“标签”功能,允许用户“标记”他们感兴趣的项目。这是我的模型

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忘年祭陌 2024-12-08 18:43:26

生成的 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" %>

: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 = {})

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

:method should be passed to html_options and rest to url_options. This should work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文