错误:在create方法中渲染新动作

时间:2012-05-21 01:23:56

标签: ruby-on-rails ruby-on-rails-3

我的应用程序有两个相关的模型:杂志和文章:

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。在这一刻,我得到消息:未定义的方法`model_name'用于NilClass:Class 在form_for的第一行。我认为这是因为帮助器中传递了 @magazine 参数。

如何使用redirect_to解决此问题? (我想保留表格中填写的其他属性。)

1 个答案:

答案 0 :(得分:0)

您的form_for_params方法正在返回nil,因为action_name设置为'创建',而不是'新'或'编辑'。

试试这个:

elseif action_name == 'new' or action_name == 'create'
  [@magazine, @article]