Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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 接受表单中发布的\u嵌套\u属性\u_Ruby On Rails - Fatal编程技术网

Ruby on rails 接受表单中发布的\u嵌套\u属性\u

Ruby on rails 接受表单中发布的\u嵌套\u属性\u,ruby-on-rails,Ruby On Rails,在问这个问题之前,我已经尝试过详细的解决方案,但没有成功 背景:2个模型、想法和项目。1个想法属于1个项目,1个项目有很多想法。 我想创建一个表单,通过指示Project\u id字段来创建具有想法字段的想法,同时指定它们属于哪个项目。我使用的是接受嵌套属性 问题:从表单创建新想法时,我无法获取项目id。从控制台中,我看到一个新想法已被保存,但该想法的project_id始终返回nil 代码: ideas_controller.rb # GET /ideas/new def new @idea

在问这个问题之前,我已经尝试过详细的解决方案,但没有成功

背景:2个模型、想法和项目。1个想法属于1个项目,1个项目有很多想法。 我想创建一个表单,通过指示Project\u id字段来创建具有想法字段的想法,同时指定它们属于哪个项目。我使用的是接受嵌套属性

问题:从表单创建新想法时,我无法获取项目id。从控制台中,我看到一个新想法已被保存,但该想法的project_id始终返回nil

代码:

ideas_controller.rb

# GET /ideas/new
def new
@idea = Idea.new
@idea.build_project

respond_to do |format|
format.html # new.html.erb
format.json { render json: @idea }
end
模型>idea.rb

class Idea < ActiveRecord::Base

belongs_to :project

accepts_nested_attributes_for :project

mount_uploader :picture, PictureUploader
validates :name, presence: true, allow_blank: false

end
classidea
_form.html.erb

<%= form_for(@idea) do |f| %>    
<% f.fields_for :project do |project_fields| %>
<% if @idea.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(@idea.errors.count, "error") %> prohibited this idea from being saved:      </h2>

  <ul>
  <% @idea.errors.full_messages.each do |message| %>
    <li><%= message %></li>
  <% end %>
  </ul>
</div>
<% end %>

<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_area :description %>
</div>
<div class="field">
<%= f.label :picture %><br>
<%= f.file_field :picture %>
</div>
<div class="field">
<%= f.label :project %><br>
<%= f.number_field :project_id, :class=>"Number" %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<% end %>

禁止保存此想法:




“数字”%>
“嵌套属性允许您通过
父项将属性保存在相关记录上。”。你是通过
孩子
来完成的,我认为这是不可能的

因此,将
接受
的嵌套属性\u移动到父模型,并使用
表单创建
字段以及
字段。因此,您将通过
projects\u controller
projects/\u form.html.erb

或者选择不做别的事情

不使用
接受嵌套的属性,将
项目ID
作为空数组添加到您的
想法
参数属性中:

def idea_params
   params.require(:idea).permit(:name, :project_ids => [])
end
app/views/ideas/_-form.html.erb

 <div>
    <%= idea.label 'File under at least one project' %>
    <% Project.all.order(name: :asc).each do |project| %>
    <div>
      <%= check_box_tag "idea[project_ids][]", project.id %>
      <%= project.name %>
    </div>
</div>


此代码将为您提供要选择的项目的复选框。这意味着首先必须以项目自己的控制器和表单创建项目。因此,您没有使用嵌套属性

将此
@idea.build_project
更改为:
@idea.project.build
可能会有所帮助。不,它会崩溃,并在编辑的行上为nil:NilClass返回未定义的方法“build”。