

現在、階層関係にあるモデルのフォームを作成しております。  
下記、モデルファイルになります。

**post.rb**

[code]

    has_many :items
    accepts_nested_attributes_for :items
    
[/code]

**item.rb**

[code]

    has_one :heading, dependent: :destroy
    has_one :content, dependent: :destroy
    has_one :link, dependent: :destroy
    has_one :movie, dependent: :destroy
    has_one :photo, dependent: :destroy
    has_one :quate, dependent: :destroy
    
    accepts_nested_attributes_for :heading
    accepts_nested_attributes_for :content
    accepts_nested_attributes_for :link
    accepts_nested_attributes_for :movie
    accepts_nested_attributes_for :photo
    accepts_nested_attributes_for :quate
    
[/code]

**heading,content,link,movie,photo,quate.rb**  
(こちらはheading.rb,conten.rb,link.rbとそれぞれモデルファイルがあるという意味です。そしてすべてに共通して下記設定がされています。)

[code]

    belongs_to :item
    
[/code]

* * *

**posts_controller.rb**

[code]

    def new
            @post = current_user.posts.build
    end
    
    def create
    
        @post = current_user.posts.build(post_params)
    
        respond_to do |format|
    
            if @post.save
                format.html { redirect_to @post, notice: 'created!!' }
            else
                format.html { render :new }
            end
    end
    
    def post_params
            params.require(:post).permit(:title, :description, :image,:user_id,
            items_attributes:[:id, :order,
                heading_attributes:[:id, :head],
                photo_attributes:[:id, :image, :title, :q_url],
                movie_attributes:[:id, :y_url],
                quate_attributes:[:id, :quate, :q_url, :q_title, :q_comment],
                content_attributes:[:id, :content],
                link_attributes:[:id, :url, :l_text],
                twitter_attributes:[:id, :t_url]
                ])
    end
    
[/code]

* * *

**posts/new_and_edit.html.erb**

[code]

    <%= form_for(@post) do |f| %>
        <% if @post.errors.any? %>
          <ul>
            <% @post.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
            <% end %>
          </ul>
        <% end %>
    
    <%= f.label :title %>
    <%= f.text_field :title %>
    
    <%= f.label :description%>
    <%= f.text_field :description %>
    
    <%= f.label :image %>
    <%= f.file_field :image %>
    
    <%= f.hidden_field :user_id %>
    
    <%= f.submit %>
    
      <%= render 'posts/item_form_fields', name: 'headings' %>
      <%= render 'posts/item_form_fields', name: 'contents' %>
      <%= render 'posts/item_form_fields', name: 'movies' %>
      <%= render 'posts/item_form_fields', name: 'quates' %>
      <%= render 'posts/item_form_fields', name: 'links' %>
      <%= render 'posts/item_form_fields', name: 'photos' %>
    
[/code]

**posts/_item_form_fields.html.erb**

[code]

    <%= form_for(@post, remote: false) do |m| %>
        <%= render 'items/form_fields', m: m, name: name %>
        <%= m.submit "作成" %>
    <% end %>
    
[/code]

**items/_form_fields.html.erb**

[code]

    <%= m.fields_for :items, @item do |b| %>
      <%= b.hidden_field :order, value: '0' %>
    
      <%= render "#{name}/form_fields", b: b %>
    <% end %>
    
[/code]

**headings/_form_fields.html.erb**

[code]

    <%= b.fields_for :heading, @item.build_heading do |h| %>
      <%= h.text_field :head %>
    <% end %>
    
[/code]

上記のように _form_fields.html.erb をcontent,link,movie,photo,quateテーブル用にそれぞれもっています。

* * *

現在ローカル環境にて実行すると、子関係にあるフォーム(headingやcontent等)が表示されません。また、"作成"をクリックするとpost_controllerのpost_paramsにて下記エラーとなります。

> param is missing or the value is empty: post

どなたかお力添えいただけませんでしょうか？


CC BY-SA 3.0
2016-01-25T09:25:02.580
21294
2023-07-14T06:05:50.640
2016-02-01T00:45:10.700
5793
14129
question
ruby-on-rails ruby rails-activerecord
階層関係にあるモデルのフォームが表示されない


new actionの `@post = current_user.posts.build` を `@post =
current_user.posts.items.build` にしてみてはどうですか  
詳しくは ["Fields_for disappear when adding
accepts_nested_attributes_for"](https://stackoverflow.com/q/11769592/5989200)


CC BY-SA 3.0
2018-02-20T08:01:07.320
41866
2018-02-20T09:31:55.000
2018-02-20T09:31:55.000
19110
23107
21294
answer