我如何获得嵌套的表单值来输入到数据库表,而不是nil?

时间:2014-03-27 02:46:15

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

我的rails应用程序中有一个嵌套表单。嵌套的字段不是向数据库添加值。

我想在地方信息表中添加一个地址。地址字段嵌套在与Post表对应的表单中。

我只是将完整代码推送到github ... http://goo.gl/wzjLK2

我认为我的帖子控制器#CREATE

中没有做任何事情
  def create
    @post = Post.new(post_params)
    @place = Place.new params[:address]
    respond_to do |format|
      if @post.save
        format.html { redirect_to @post, notice: 'Post was successfully created.' }
        format.json { render action: 'show', status: :created, location: @post }
      else
        format.html { render action: 'new' }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end

供参考,我的帖子表格:

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

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

  <div class="field">
    <%= f.label :status %><br>
    <%= f.text_field :status %>
  </div>
  <div class="field">
    <%= f.label :upload %><br>
    <%= f.text_field :upload %>
  </div>

    <%= f.fields_for @post.place do |p| %>
       <div class="field">
        <%= p.label :address %><br>
        <%= p.text_field :address %>
      </div>

  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我的帖子模型......

class Post < ActiveRecord::Base

  belongs_to :place
  belongs_to :user
  has_many :comments
  has_many :commenters, through: :comments, source: :user
  accepts_nested_attributes_for :place

  def place_for_form
    collection = places.where(place_id: id)
    collection.any? ? collection : places.build
  end

end

非常感谢任何帮助。我已经被困在这两天了。

1 个答案:

答案 0 :(得分:0)

运行代码后,我注意到服务器控制台出错:

Unpermitted parameters: place

中更改此@post.place
  <%= f.fields_for @post.place do |p| %>
    <div class="field">
      <%= p.label :address %><br>
      <%= p.text_field :address %>
    </div>
  <% end %>

:place,一切正常。