我有一个simple_form_for new_comment导致浏览器出现undefined method
comments_path'错误,当我只是尝试查看表单时(不提交)
_form.html.slim
= simple_form_for new_comment, :remote => true do |f|
这是部分的,因此传递的局部变量来自hacks scaffold的显示页面
show.html.slim - hacks
= render partial: "comments/form", locals: { new_comment: @new_comment } if user_signed_in?
我在黑客控制器中定义@new_comment
hacks_controller.rb
def show
@hack = Hack.find(params[:id])
@comments = @hack.comment_threads.order('created_at DESC')
@new_comment = Comment.build_from(@hack, current_user.id, "") if user_signed_in?
#build_from is a method provided by the acts_as_commentable_with_threading gem
end
为什么new_comment想要路由到comments_path?我甚至没有提交表格。
的routes.rb
root 'hacks#index'
concern :commentable do
resources :comments, only: [:create, :update, :destroy]
end
resources :hacks, concerns: [:commentable]
resources :users
devise_for :users, :skip => [:sessions, :registration]
devise_for :user, :path => '', :path_names => { :sign_in => "login",
:sign_out => "logout",
:sign_up => "register",
:account_update => "account-settings" }
答案 0 :(得分:1)
由于你的评论嵌套在hacks中,你需要评论和黑客。所以,试试这个
<强> show.html.slim 强>
= render partial: "comments/form", locals: { new_comment: @new_comment, hack: @hack } if user_signed_in?
<强> _form.html.slim 强>
= simple_form_for [hack, new_comment], :remote => true do |f|
答案 1 :(得分:0)
<强>路线强>
首先,我认为您的表单不会路由到index
操作
对comments_path
的调用取决于您在路线中定义的CRUD操作。具体来说,form_for
将自动填充create
操作,Rails将尝试从您在resource
文件中定义的基于routes.rb
的路由集调用:
请注意上面的示例,如何使用/photos
动词转到POST
?这可能看起来像
发送到“索引”动作(photos_path
) - 但实际上,凭借HTTP动词,它将转到create
动作
<强>表格强>
simple_form_for
基本上是form_for
的抽象:
在刚刚显示的示例中,虽然未明确指出,但我们 仍然需要使用:url选项以指定表单的位置 将要发送。但是,如果可以进一步简化 传递给form_for的记录是一种资源,即它对应于a 一组RESTful路由,例如使用资源方法定义 配置/ routes.rb中。在这种情况下,Rails将简单地推断出合适的 记录本身的URL
基本上,form_for
尝试构建要从其拥有的对象提交的url
。您有一个嵌套路由,这意味着您需要提供嵌套对象:
= simple_form_for [hack, new_comment], :remote => true do |f|
这应该将路径发送到hacks_comments_path
,这是你想要的,对吧?或者,您可以规定url
选项:
= simple_form_for new_comment, remote: true, url: hacks_comments_path(hack) do |f|
请注意这两个修补程序如何需要hack
局部变量?
= render partial: "comments/form", locals: { new_comment: @new_comment, hack: @hack } if user_signed_in?
<强>修正强>
您需要将nested
路径传递给simple_form_for
帮助者(如上所述)