Поле для внутри рельсов 3 не показывает элементы отображения внутри - PullRequest
1 голос
/ 25 июня 2011

У меня есть модель с именем Order и другая модель с именем Member, и когда я пытаюсь отобразить поля из модели Members в моем представлении Orders, она даже не отображается при использовании тега fields_for. Вот как выглядит мой код.

модель заказа

class Order < ActiveRecord::Base
  has_many :members 
end

модель члена

class Member < ActiveRecord::Base
  belongs_to :order
end

Контроллер заказов

class OrdersController < ApplicationController

  def new
    @order = Order.new
    3.times { @order.members.build }
    @title = "Order Form"
  end

  def create
    @order = Order.new params[:order]
    if @order.save 
      flash[:notice] = "Your order has been created"
      redirect_to orders_path
    else
      @title = "Order Form"
      render 'new'
    end
  end 
end

Проблема в моем представлении заказов:

<% for member in @order.members %>
  This displays 3 times but the information below doesn't
  <% fields_for "...", member do |member_form| %>
    <p>
      Name: <%= member_form.text_field :name %>
    </p>
  <% end %>
<% end %>

По какой-то странной причине информация в полях для тега не будет отображаться ни разу. Я что-то пропустил?

Если вы узнаете, что я делаю неправильно, не могли бы вы объяснить это мне, потому что я новичок в рельсах.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 25 июня 2011

Блок, данный вызову fields_for в коллекции, будет повторяться для каждого экземпляра в коллекции, по существу создавая свой собственный цикл, поэтому вам не нужно писать собственный явный цикл "для члена в @ order.members».Кроме того, вы можете использовать функциональность nested_attributes для непосредственного сохранения связанных элементов с помощью @ order.save:

class Order < ActiveRecord::Base
  has_many :members 
  accepts_nested_attributes_for :members
end

class Member < ActiveRecord::Base
  belongs_to :order
end

В представлении:

<%= form_for @order do |order_form| %>
  ...
  <%= order_form.fields_for :members do |member_form| %>
    Name: <%= member_form.text_field :name %>
  <% end %>
<% end %>

И я думаю, что ваш метод создания контроллера долженработать так, как есть.

См. документацию API для fields_for , особенно подраздел «Один ко многим».

0 голосов
/ 25 июня 2011

Я думаю, вам просто нужно избавиться от "...", в вашем вызове fields_for, так как поля для ожидают объекта.

Попробуйте:

<% fields_for member do |member_form| %>
...