使用预先填充父级的表单创建子记录,而不更改路径?

时间:2012-04-25 01:06:54

标签: ruby-on-rails activerecord

我有一个Makes模型:

class Make < ActiveRecord::Base
  attr_accessible :name
  has_many :models, dependent: :destroy
  has_many :trims, :through => :models
end

和模型模型:

class Model < ActiveRecord::Base
  attr_accessible :name, :year, :make_id, :trim_id
  belongs_to :make
  has_many :trims
  validates :make_id, presence: true  
end

现在忽略我的质量分配漏洞一秒钟,我如何完成这样的事情:一旦通过/ makes / new创建一个Make并返回到make / 1,就会显示一个包含创建模型的链接的页面那个。

我知道我可以定义另一个控制器来执行此操作并预填充make_id字段,但这是正确的方法吗?我创建模型的路线是/models/new。有没有办法预填这种形式,并让它表现得好像它没有预先填充?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种可靠方法是创建一个动态路径来建模/ new /:make_id。

在make#show页面的“使用该Make创建模型的链接”中,将其设置为使用新路线。

然后,在模型控制器的新操作中,将其分配给自己的实例变量:

@make_id = params[:make_id]

在模型#new的视图中,您可以使用该变量填充表单的make text_field(假设它是text_field):

<%= f.text_field :make, :value => @make_id %>

如果你想更精细,你可以在你的视图中使用@make_id来隐藏文本字段并设置一个隐藏的输入,如果@ make.present?。由于任何人都可以通过摆弄URL来搞乱该页面,我建议验证传入的make_id是否有效。