如何在Rails 3中通过嵌套表单传递外键属性



我有三个模型:

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从列表中选择客户机。我宁愿把新的资产负债表链接在客户端显示页面上,只是通过客户端id传递到表单,这样我就不必从列表中选择客户端或在字段中键入它。首先,我要怎么做?

第二,investment_asset模型嵌套在资产负债表表单中。除了investment_asset的client_id属性为空之外,一切正常。我不知道为什么,因为我的联想似乎还好。问题是,如何通过嵌套表单传递client_id属性?我可以发布模型或控制器,请告诉我。

UPDATE我已经找到了我第一个问题的答案。然而,我仍然试图找出基于这个答案的第二部分,也就是说,我如何通过一个嵌套的表单传递这个client_id ?为了展示它是如何在创建资产负债表时传递用户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,就像我在资产负债表上做的那样:

(:id => @client.id)

我可以把同样的东西放在investment_asset控制器的新动作中,并添加一个隐藏字段,但我不确定如何在链接上传递它。想法吗?

这可能是我所知道的全部hack,但我所知道的非常有限。我在这里做的是使用jQuery从资产负债表中获取id,并将其强制放入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 => '' %> 

它工作得很好。希望这是一种有效的方法

相关内容

  • 没有找到相关文章

最新更新