我刚开始学习 ruby,所以这个问题很简单。
我在控制器中创建了@subject。
为什么在 form_for 中使用 :subject(而不是 @subject)?
<%= form_for(:subject, :url => {:action => 'create'}) do |f| %>
我刚开始学习 ruby,所以这个问题很简单。
我在控制器中创建了@subject。
为什么在 form_for 中使用 :subject(而不是 @subject)?
<%= form_for(:subject, :url => {:action => 'create'}) do |f| %>
根据文档,您可以使用任一(http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for)。
传入符号:subject
将为名为“主题”的资源创建通用表单。传入实例变量@subject
将为 Subject 类的特定实例创建一个表单,并为您找出正确的 url(假设您遵循标准的 rails 约定)。文档提到,使用带有实例变量的后一种方法是首选方法。
它类似于 rspec rails testing 中的 assignments(您可以查找它,assigns(:subject) 将在您的控制器中寻找 @subject)。如果我错了,请纠正我,但我认为这是因为符号 :subject 将尝试在控制器中寻找与 @subject 对应的实例变量。因此,为了证明这一点,请将控制器中的 @subject 重命名为其他名称,例如 @subjectz ,我认为它不会正常工作