Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails 4新操作未知属性错误_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails rails 4新操作未知属性错误

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)

我得到以下错误

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)

    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 %>