0

私のアプリケーションには、Magazine と Article の 2 つのモデルが関連付けられています。

class Magazine < ActiveRecord::Base
  has_one :article
end

class Article < ActiveRecord::Base
  belongs_to :magazine
  validation_presence_of :title
end

Magazine ショー ページから新しい記事を作成できるので、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 の undefined method `model_name'というメッセージが表示されます。@magazineパラメータがヘルパーに渡されたためだと思います。

redirect_to を使用せずにこの問題を解決するにはどうすればよいですか? (フォームに入力された他の属性を維持したい。)

4

1 に答える 1

0

メソッドform_for_paramsは を返しています。これは、 が「新規」または「編集」ではなく「作成」に設定されているnilためです。action_name

これを試して:

elseif action_name == 'new' or action_name == 'create'
  [@magazine, @article]
于 2012-05-21T01:31:12.633 に答える