Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 错误:在创建方法中呈现新操作_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 错误:在创建方法中呈现新操作

Ruby on rails 错误:在创建方法中呈现新操作,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我的应用程序有两个关联模型:杂志和文章: 在杂志展示页面,我有“新文章”链接,比如: 因此,我可以使用文章形式_,例如: <%= simple_form_for(form_for_params) do |f| %> ... 当title属性出现验证错误,并且呈现新操作时,就会出现问题。在这一刻,我得到了一条消息:NilClass:Class的未定义方法'model\u name',在表单\u for的第一行中。我认为这是因为@magage参数传入了helper 如果不使用重定向,

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

在杂志展示页面,我有“新文章”链接,比如:

因此,我可以使用文章形式_,例如:

<%= simple_form_for(form_for_params) do |f| %> ...
当title属性出现验证错误,并且呈现新操作时,就会出现问题。在这一刻,我得到了一条消息:NilClass:Class的未定义方法'model\u name',在表单\u for的第一行中。我认为这是因为@magage参数传入了helper


如果不使用重定向,我如何解决此问题?(我想保留表单中填写的其他属性。)

您的
form\u for_params
方法返回
nil
,因为
action\u name
设置为“创建”,而不是“新建”或“编辑”

试试这个:

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

成功了!这么简单,我没有意识到。我认为因为我使用的是“render:action=>:new”,所以我只需要验证“new”操作。非常感谢你!
<%= link_to 'New article', new_magazine_article_path(@article)
module ArticlesHelper
  def form_for_params
    if action_name == 'edit'
      [@article]
    elsif action_name == 'new'
      [@magazine, @article]
    end
  end
end
<%= simple_form_for(form_for_params) do |f| %> ...
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
elseif action_name == 'new' or action_name == 'create'
  [@magazine, @article]