2011-08-28 70 views
8

我试图创建一个'标记'功能,它允许用户“标记”他们感兴趣的项目。这里是我的模型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调用创建此网址:

http://localhost:3000/tags?method=post&tag_id=7&user_id=1 

这不会在数据库中创建Tag记录。下面是我在tags_controller

def create 
    @tag = Tag.new 
    @tag.user_id = params[:user_id] 
    @tag.tag_id = params[:tag_id] 
    @tag.save 
    end 

我怎样才能得到的link_to创建并保存新的标签记录:create行动?

回答

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。这应该工作。

+0

谢谢!它适用于您的修复。在回答中显示link_to签名确实帮助我最终了解发生了什么。非常感激。 –

+1

只是一个快速的评论。在url_options散列中,控制器键的值应该是“items”而不是“item”。尝试显示链接时,它会给你一个ActionController路由错误。 – icantbecool

+0

@dexter,如果链接不在应用程序之外,例如在电子邮件中会发生什么情况?我的使用案例是针对RSVP的。我想直接从电子邮件链接创建一个新的RSVP,但我想保持RESTful。 – Mohamad

相关问题