Как передать атрибуты внешнего ключа через вложенную форму в Rails 3 - PullRequest
1 голос
/ 28 апреля 2011

У меня есть три модели:

class Client < ActiveRecord::Base
   has_many :balancesheets
   has_many :investment_assets, :through => :balancesheets

class Balancesheet < ActiveRecord::Base
   belongs_to :client
   has_many :investment_assets, :dependent => :destroy
   accepts_nested_attributes_for :investment_assets, :allow_destroy => true

class InvestmentAsset < ActiveRecord::Base
    belongs_to :balancesheet
       belongs_to :client

У меня есть два вопроса, связанных с внешним ключом client_id.Во-первых, когда я создаю новый баланс, я использую collection_select, чтобы выбрать клиента из списка.Я бы предпочел поместить новую ссылку на баланс на странице показа клиента и просто передать идентификатор клиента в форму, чтобы мне не пришлось выбирать клиента из списка или вводить его в поле.Итак, во-первых, как мне это сделать?

Во-вторых, модель investment_asset вкладывается в форму баланса.Все работает просто отлично, за исключением того, что атрибут client_id для investment_asset пуст.Я не уверен почему, потому что мои ассоциации кажутся нормальными.Итак, вопрос в том, как передать этот атрибут client_id через вложенную форму?Я могу публиковать модели или контроллеры, просто дайте мне знать.

ОБНОВЛЕНИЕ С тех пор я нашел ответ на свой первый вопрос здесь .Тем не менее, я все еще пытаюсь выяснить вторую часть на основе этого ответа, а именно, как я могу передать этот client_id через вложенную форму?Чтобы показать, как работает передача идентификатора пользователя при создании баланса, вот ссылка на страницу показа клиента:

<%= link_to 'New BalanceSheet',new_balancesheet_path(:id => @client.id) %>  

В форме баланса есть скрытое поле:

 <%= f.hidden_field :client_id %>  

Ив контроллере баланса это новое действие:

 @balancesheet = Balancesheet.new(:client_id => params[:id])

Это работает просто отлично.Поэтому для investment_asset я использую Ryan Bates nested_form gem , который имеет немного другой синтаксис для ссылки.Таким образом, внутри формы баланса есть ссылка для добавления нового investment_asset:

 <%= f.link_to_add "Add asset", :investment_assets %>

Я не могу понять, как передать идентификатор пользователя, как я это сделал в балансе с помощью:

(:id => @client.id)

Я могу добавить то же самое в новое действие в контроллере investment_asset и добавить скрытое поле, но я не уверен, как передать это по ссылке.Мысли?

1 Ответ

0 голосов
/ 29 апреля 2011

Это может быть полный взлом, насколько я знаю, но все, что я знаю, очень ограничено. В итоге я сделал так, чтобы пользователь jQuery взял идентификатор из баланса и ввел его в скрытое поле для investment_asset. JQuery:

// get the value from the balancesheet hidden field that contains the user_id value
var balsheetclientid = jQuery('#hiddenid').attr('value'); 
// insert it into the value attribute in the hidden field with class name .iaclientid
jQuery('.iaclientid').val(balsheetclientid) 

Тогда мое скрытое поле выглядит так:

<%= f.hidden_field :client_id, :class => 'iaclientid', :value => '' %> 

Работает просто отлично. Надеюсь, это правильный способ сделать это.

...