Form_For Helper中的未定义方法

时间:2016-03-13 03:01:44

标签: ruby-on-rails nested-forms form-for nested-form-for

我有protected void paintComponent(Graphics g) { super.paintComponent(g); 模型post belongs_to模型。帖子资源嵌套在类别资源下。我正在构建category来创建新帖子。但是,我收到以下错误:

form_for @post

根据我的路线,它应该指向undefined method 'posts_path' for #<#<Class:0x007fd54ba33540>:0x007fd54c8e57c8>,但我不确定为什么不是。{1}}。我尝试了here提出的解决方案,因为它与我的情况非常相似,但无济于事。有什么想法吗?

routes.rb中:

new_category_post_path

app / models / category.rb和post.rb:

resources :categories do
  resources :posts
end

应用/控制器/ posts_controller.rb:

class Category < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :category
end

视图/帖/ new.html.erb:

class PostsController < ApplicationController    
  def new
    @category = Category.find(params[:category_id])
    @post = @category.posts.new
  end
end

佣金路线:

<%= form_for @post do |f| %>
  <%=f.text_field :title, placeholder: 'Title...' %>
  <%=f.text_area :content %>
  <%=f.submit 'Create post' %>
<% end %>

1 个答案:

答案 0 :(得分:0)

如果要嵌套资源,则需要确保form_for帮助程序中生成的URL知道如何正确执行该操作。在这种情况下,您需要传递2个对象,post对象和category对象。位置是第一个,新对象在数组中是第二个,因此您的表单看起来更像是:

<%= form_for [@category,@post] do |f| %>
  <%=f.text_field :title, placeholder: 'Title...' %>
  <%=f.text_area :content %>
  <%=f.submit 'Create post' %>
<% end %>