2012-08-01 65 views
0

所以我試圖爲用戶創建一個表單來留下關於電影的評論,但Rails一直在向我拋出一個未定義的方法錯誤。我的應用程序允許用戶查看電影。所以我希望表單允許用戶在該電影的上下文中創建一個評論。我的代碼如下,任何幫助將不勝感激。我唯一的困惑是,我不知道是否我應該巢資源或我只是用指定的form_for爲什麼在Rails中創建表單時,爲NilClass:Class獲取未定義的方法`model_name'?

我的路線文件中的錯誤值如下:

resources :users 
    resources :movies 
    resources :reviews 
    resources :sessions, only: [:new, :create, :destroy] 

我有一個評論控制器,它看起來是這樣的:

class ReviewsController < ApplicationController 

    def create 
     movie_id = params[:review].delete(:movie_id) 

     @review = Review.new(params[:review]) 
     @review.movie_id = movie_id 

     @review.save 

     redirect_to movie_path(@review.movie) 
    end 
end 

我的形式如下:

<h2>Leave a Review</h2> 

<%= form_for(@review) do |f| %> 
    <%= f.hidden_field :movie_id %> 
    <div class="field"> 
    <%= f.text_area :content, placeholder: "Write a new review..." %> 
    </div> 
    <%= f.submit "Submit", class: "btn btn-large btn-primary" %> 
<% end %> 

我有三個型號:

用戶:

class User < ActiveRecord::Base 

    has_secure_password 
    has_many :reviews, dependent: :destroy 
    has_many :movies, through: :reviews 

end 

電影:

class Movie < ActiveRecord::Base 

    has_many :reviews 
    has_many :users, through: :reviews 


end 

評論:

class Review < ActiveRecord::Base 

    attr_accessible :content, :movie_id 
    belongs_to :user 
    belongs_to :anime 

end 

以下是錯誤:

NoMethodError in Movies#show 

Showing /Users/david/Sites/Rails/Chirp/app/views/movies/show.html.erb where line #32 raised: 

undefined method `model_name' for NilClass:Class 
Extracted source (around line #32): 

29: 
30: <h2>Leave a Review</h2> 
31: 
32: <%= form_for(@review) do |f| %> 
33: <%= f.hidden_field :movie_id %> 
34: <div class="field"> 
35:  <%= f.text_area :content, placeholder: "Write a new review..." %> 
+0

後加回對象中要顯示錯誤輸出 – allesklar 2012-08-01 14:37:38

+0

我剛纔粘貼上面 – David 2012-08-01 14:45:33

回答

2

您的@review實例變量實際上是一個Movie。 @ review.movi​​e將不確定

編輯

好吧,你編輯你的問題,以解決您@review變量。

因此,現在發生的事情是您的Review控制器設置@review實例變量,然後重定向到Movies#show。重定向請求有效地拋出您在Review控制器中設置的所有實例變量。

因此,從Movies#show的角度來看,@review不存在。

無論是分享您的代碼爲你的電影控制器表演動作,所以我們可以看到發生了什麼,或者只是試圖重新定義@review在電影#顯示

@movie = Movie.find params[:id] 
@review = current_user.reviews.build(movie: @movie) 
0

您的控制器的新操作中是否有@review = Review.new

0

不知道它的相關的形式問題,但在create方法,您將創建一個Movie而不是Review

而且不知道爲什麼你刪除鍵movie_id然後調用new

+0

對不起這是一個錯誤的錯誤,我實際上使用Review.new,但我仍然收到錯誤。 – David 2012-08-01 14:45:16

+0

那麼遵循什麼ryudice發佈。顯然,你甚至沒有在控制器中聲明一個'new'動作! – 2012-08-01 14:47:10

相關問題