fields_for в рельсах 3 выпуск - PullRequest
       6

fields_for в рельсах 3 выпуск

1 голос
/ 22 февраля 2012

Преобразование другого приложения из Rails 2 в Rails 3 - в одном из моих представлений у меня есть этот код:

<%fields_for "order[commission_attributes][]", commission do |f|%>

Это зависит от действия контроллера ниже:

def edit
  @order = Order.find(params[:id],:include=>[{:orderitems=>:item_schedules}, :memberids ],:order=>"orderitems.updated_at DESC")
  @active_order_iems = []
  @inactive_order_items = []
  @order.orderitems.each do |oi|
    oi_active = nil
    oi.item_schedules.each do |is|
        if (is.end_date > Date.today)
          oi_active =true
          break
        end
    end
    @active_order_iems << oi if !oi_active.nil?
    @inactive_order_items << oi if oi_active.nil?
  end

  @commissions = @order.commissions.find(:all)
  @ordertypes = Ordertype.find(:all, :order=>"description")
  @salesreps = Salesrep.find(:all, :order=>"fullname")
  @customers = Customer.find(:all, :order=>"company_name")
  @memberids = Memberid.find_all_by_customer_id(@order.customer_id)
  @products = Product.find(:all, :include=>[:items],:order=>["products.description"])
  @partners = Partner.find(:all, :order=>"company_name")
end

def get_reps
  @salesreps = Salesrep.find(:all,:order=>"fullname")
  @commission = Commission.new
  render :partial=>'commission'
end

В моей модели 'order' у меня есть это:

 def commission_attributes=(commission_attributes)
  commission_attributes.each do |attributes|
    if attributes[:id].blank?
      commissions.build(attributes)
    else
      commission = commissions.detect{|t| t.id == attributes[:id].to_i}
      commission.attributes = attributes
    end
   end
 end

Это работает в рельсах 2, однако в рельсах 3 я получаю ошибку ниже:

@order[commission_attributes]' is not allowed as an instance variable name

Я не могу понять, в чем проблема или как обойти эту проблему ... любая помощь очень ценится.

Andrew

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Метод fields_for принимает только объекты или символы. Трудно дать конкретное решение без дополнительного кода, но что-то вроде этого может сработать:

<%= form_for @order do |form| %>
  ...
  <%= fields_for @order.commission do |commission_form| %>

Читайте об этом здесь: http://apidock.com/rails/v3.0.0/ActionView/Helpers/FormHelper/fields_for

1 голос
/ 22 февраля 2012

Другая альтернатива -

<%= f.fields_for :commission, commission do |commission_form| %>

Это должно привести к отправке триггера commission_attributes= вместо того, чтобы связываться с другой моделью напрямую, и, предоставив объект, вы можете заполнить форму указанным объектом.

Но это еще один метод, о котором стоит упомянуть. Вот документ fields_for # Вложенные атрибуты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...