Ruby on rails rails 4新操作未知属性错误
我得到以下错误 PostsController中的未知属性错误#新建 未知属性:公司id 邮务主任Ruby on rails rails 4新操作未知属性错误,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我得到以下错误 PostsController中的未知属性错误#新建 未知属性:公司id 邮务主任 def new @company = Company.find(params[:company_id]) @post = @company.posts.build end def create @company = Company.find(params[:company_id]) @post = @company.posts.build(post_params)
def new
@company = Company.find(params[:company_id])
@post = @company.posts.build
end
def create
@company = Company.find(params[:company_id])
@post = @company.posts.build(post_params)
if @post.save
redirect_to @post
else
render 'new'
end
end
private
def post_params
params.require(:post).permit(:title, :summary, :body)
end
路线
resources :companies do
resources :posts
end
模型
class Post < ActiveRecord::Base
belongs_to :company
end
class Company < ActiveRecord::Base
belongs_to :user, dependent: :destroy
has_many :posts
end
class Post
形式
我希望每个帖子都属于一个公司,一个帖子的表中有属性
company\u id
。我不明白这为什么不起作用。在post\u参数中添加company\u id
posts\u controller.rb
private
def post_params
params.require(:post).permit(:title, :summary, :body, :company_id)
end
在表单中添加公司id
<%= form_for (@post) do |f| %>
<div class="form-group">
<%= f.label :Post_Title %>
<%= f.text_field :title, class: "form-control", placeholder: "Post Title" %>
</div>
<div class="form-group">
<%= f.label :Post_Summary %>
<%= f.text_area :summary, class: "form-control", placeholder: "Post Summary" %>
</div>
<div class="form-group">
<%= f.label :Post_Post %>
<%= f.text_area :body, class: "form-control", placeholder: "The Post" %>
</div>
<%= hidden_field_tag 'company_id', @company.id %>
<div class="form-group">
<%= f.submit :Submit, class: "btn btn-success" %>
</div>
<% end %>
当您嵌套资源时,最终会破坏路由中的许多默认路径。通常,这只是一个简单的补丁,可以将posts\u path
更新为company\u posts\u path(@company)
对于此表单,您的表单(用于
的)会将您发送到旧的帖子#新的
,而不是新嵌套的帖子。我将继续猜测,在您发布的嵌套资源之外,您的路由中仍然有资源:posts
要解决此问题,您需要将(@post)
的表单的路径更改为([@company,@post])
。这样,表单将知道如何将您发送到嵌套在@company
中的@post
表单。请从您的posts控制器发布您的视图和post_参数方法。添加了视图和post_参数方法您知道,您仍然必须传递一个company_id,以便您的控制器在params散列中接收它。视图和params方法都不包含company_id。这是创建表后在迁移中添加的列吗?company_id
在参数中传递(在url中)。“新”视图甚至没有呈现,您有解决方案吗?将公司id
传递为隐藏字段
来自表单
<%= form_for (@post) do |f| %>
<div class="form-group">
<%= f.label :Post_Title %>
<%= f.text_field :title, class: "form-control", placeholder: "Post Title" %>
</div>
<div class="form-group">
<%= f.label :Post_Summary %>
<%= f.text_area :summary, class: "form-control", placeholder: "Post Summary" %>
</div>
<div class="form-group">
<%= f.label :Post_Post %>
<%= f.text_area :body, class: "form-control", placeholder: "The Post" %>
</div>
<%= hidden_field_tag 'company_id', @company.id %>
<div class="form-group">
<%= f.submit :Submit, class: "btn btn-success" %>
</div>
<% end %>