Forum: Ruby on Rails Arrays with fields_for ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Rick S. (Guest)
on 2007-02-15 07:45
(Received via mailing list)
This is a simpler version of a question I asked earlier that was
probably too long.  I am trying to combine an array with fields_for, if
this is possible.

I have classes Account and Employee, with a many-to-many relationship.
I define a model class AccountEmployeeRelation to link the two.  The
link class also contains an extra field called "role".

I want to create an Account and assign employees in one form.  (The
employees already exist).  I have figured out how to add one employee
(not sure if this is the best way, but it works):

Controller:

      def new
        @account = Account.new
        @r = AccountEmployeeRelation.new
      end

      def create
        @account = Account.new(params[:account])
        @r = AccountEmployeeRelation.new(params[:r])
        @account.account_employee_relations << @r
        @account.save
        @r.save
        redirect_to :action => :list
      end

View, new.rhtml:

    <% form_for :account, :url => { :action => :create } do |form| %>
    Title: <%= form.text_field :title %><br/>

    <% fields_for :r do |r|%>
       Employee: <%= r.select (:employee_id, Employee.find(:all).map{|u|
    [u.name, u.id]}) %><br/>
       Role: <%= r.select (:role, ['Boss', 'King', 'Queen']) %>
    <% end %>

    <%= submit_tag %>
    <% end %>

But how do I assign multiple employees in one form?  I would guess that
'new' needs to look like: (up to 3 employees)

      def new
        @account = Account.new
        @rs = []
        3.times do
          @rs << AccountEmployeeRelation.new
        end
      end

But the following does not work for the view.  I get this error:
|`@#<AccountEmployeeRelation:0xb7628038>' is not allowed as an instance
variable name|

    <% for r in @rs %>
    <% fields_for r do |f| %>
       Employee: <%= f.select (:employee_id, Employee.find(:all).map{|u|
    [u.name, u.id]}) %><br/>
       Role: <%= f.select (:role, ['Boss', 'King', 'Queen']) %>
    <% end %>
    <% end %>

Any pointers are appreciated.
Rick (Guest)
on 2007-02-15 16:13
(Received via mailing list)
Sorry for the bump, but I'm still hoping someone can help.
This topic is locked and can not be replied to.