我的应用程序有两个关联模型:杂志和文章:
class Magazine < ActiveRecord::Base
has_one :article
end
class Article < ActiveRecord::Base
belongs_to :magazine
validation_presence_of :title
end
从杂志展示页面我可以创建一个新文章,所以我的 routes.rb 配置如下:
resources :magazines, :shallow => true do
resources :articles
end
在杂志展示页面中,我有“新文章”链接,例如:
<%= link_to 'New article', new_magazine_article_path(@article)
以及将正确参数传递给 form_for 的文章助手:
module ArticlesHelper
def form_for_params
if action_name == 'edit'
[@article]
elsif action_name == 'new'
[@magazine, @article]
end
end
end
所以我可以使用 Article form_for 之类的:
<%= simple_form_for(form_for_params) do |f| %> ...
用于 new 和 create 的 ArticlesController 方法是:
respond_to :html, :xml, :js
def new
@magazine = Magazine.find(params[:magazine_id])
@article = Article.new
end
def create
@magazine = Magazine.find(params[:magazine_id])
@article = @magazine.build_article(params[:article])
if @article.save
respond_with @magazine # redirect to Magazine show page
else
flash[:notice] = "Warning! Correct the title field."
render :action => :new
end
end
当 title 属性存在验证错误并呈现操作 new 时,会出现此问题。此刻我收到消息:form_for 第一行中NilClass:Class 的未定义方法“model_name” 。我认为这是因为@magazine参数在帮助程序中传递。
如果不使用 redirect_to 我怎么能解决这个问题?(我想保留表单中填写的其他属性。)