1

映画コントローラーと検索コントローラーがあります。検索コントローラーでは、IMDB から映画を検索できます。[ムービーをライブラリに追加] をクリックできるフォームを作成し、ムービー テーブルに新しいエントリを作成しようとしています。

私の検索コントローラーには

    def new
        @search = Search.new
        @movie = Movie.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @search }
    end
  end

私の検索インデックスビューには

<%= simple_form_for(@movie) do |f| %>
<%= f.input :title, :as => :hidden, :input_html => { :value => "Skyfall" } %>
<%= f.input :year, :as => :hidden, :input_html => { :value => "2012" } %>
<%= f.input :description, :as => :hidden, :input_html => { :value => "James Bond" } %>
<%= f.association :genres, include_blank: false, :as => :hidden, :input_html => { :value => "some value" } %>
<%= f.button :submit, class: "btn btn-primary" %>

Searches#index で NoMethodError が発生し、その後に NilClass:Class の未定義メソッド「model_name」が続きます。

4

1 に答える 1

0

あなたのコードは問題ありません。つまり、コントローラーの @movie に新しいオブジェクトを配置していますが、これはまったく問題ありません。

次のように、Search#index にオブジェクトの新しいインスタンスを必ず追加してください。

def index
  @movie = Movie.new
end

ビュー フォームが次の行で評価されると、エラーが発生します。

<%= simple_form_for(@movie) do |f| %>

@movie は nil であるため、model_name はオブジェクト nil のメソッドではなく、例外が発生します。

于 2013-03-03T02:26:23.400 に答える