У меня есть три модели:
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 и добавить скрытое поле, но я не уверен, как передать это по ссылке.Мысли?