如何为acts_as_commentable表单设置正确的路由?

时间:2015-09-21 09:35:15

标签: ruby-on-rails acts-as-commentable

有两个模型:User,谁做评论(由Devise提供),Audio,他们评论。每个audios#show页面都应列出该音频的所有评论,并提供一个小表单,以便提交另一个。

我做了Audio acts_as_commentable。然后我确保Comment belongs_to :userUser has_many :comments

对于路线,我有

resources :audios do 
  resources :comments
end

然后,在audios_controller上,

def show
  if user_signed_in?
    @comment = @audio.comments.new
  end
end

然后我写了一个带有'comment'字段和提交按钮的简单form_for(@comment)表单。就是这样。

加载页面时出现的错误是未定义的方法'comments_path'。我用Google搜索了这个错误,阅读了StackOverflow响应,然后尝试了form_for(@audio, @comment)。这得到错误**无法写入未知属性'html'。

我有点难过;我已经在我的记事本上勾勒出了模型和关系,但我没有经验,使用我不完全理解的东西,比如幕后的Devise,就是把我扔了一圈。如果有人能给我一些关于这些路线/表格的提示,我会很喜欢。

2 个答案:

答案 0 :(得分:1)

在routes.rb中你需要这个:

# routes.rb
resources :comments, :only => [:create, :destroy]

:comments路由单独在您尝试添加注释功能的资源之外。

然后,如果你运行rake routes,它将返回:

$ rake routes
comments    POST        /comments(.:format)     comments#create
comment     DELETE  /comments/:id(.:format)     comments#destroy

这将为您提供comments_path帮助程序和comment_path(:id)帮助程序来完成POST和DELETE请求。

查看本教程,当我需要使用这个gem时,它帮助了我很多:http://twocentstudios.com/blog/2012/11/15/simple-ajax-comments-with-rails/

答案 1 :(得分:0)

尝试

form_for [@audio, @comment]

form_for @comment, url: audio_comment_path(@audio, @comment)