我正在構建一個具有Keynote模型和Story模型(以及用Devise實現的User模型)的應用程序。主題演講有很多故事和故事屬於主題演講。控制器中的NoMethodError#action - 未定義的方法`keynote'爲#<用戶:0x007fba0e32f760>
我在創造新的故事的問題,我得到以下錯誤:
NoMethodError in StoriesController#create
undefined method `keynote' for #User:0x007fba0e32f760
上stories_controller.rb的第18行是
@story = @current_user.keynote.stories.build(params[:story])
在創建方法
發生的錯誤。
這是我stories_controller.rb的一部分
class StoriesController < ApplicationController
before_filter :authenticate_user!, :except => [:show, :index]
def index
@keynote = Keynote.find(params[:keynote_id])
@stories = @keynote.stories
end
def new
@keynote = Keynote.find(params[:keynote_id])
@story = @keynote.stories.build
end
def create
if user_signed_in?
@keynote = Keynote.find(params[:keynote_id])
@story = @current_user.keynote.stories.build(params[:story])
if @story.save
flash[:notice] = 'Question submission succeeded'
redirect_to keynote_stories_path
else
render :action => 'new'
end
end
end
這是我keynotes_controller.rb
這些參數傳遞:
{"utf8"=>"✓", "authenticity_token"=>"76odSpcfpTlnePxr+WBt36fVdiLD2z+Gnkxt/Eu1/TU=", "keynote_id"=>"1", "story"=>{"name"=>"Hi?"}, "commit"=>"Ask"}
這是什麼我在我的routes.rb文件中有:
get "keynotes/index"
get "users/show"
devise_for :users
get "votes/create"
get "stories/index"
resources :keynotes do
resources :stories
end
resources :stories do
get 'bin', :on => :collection
resources :votes
end
resources :users
root :to => 'keynotes#index'
我刪除了current_user
從錯誤的行,只剩下@story = @keynote.stories.build(params[:story])
。這會引發不同的錯誤:
Routing Error
No route matches {:controller=>"stories"}
但在數據庫中的記錄被創建,而不USER_ID雖然。
任何幫助將非常感激。
更新:這是我的用戶模型,user.rb
class User < ActiveRecord::Base
has_many :stories
has_many :keynotes
has_many :votes
has_many :stories_voted_on, :through => :votes, :source => :story
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
end
這裏的keynote.rb型號:
class Keynote < ActiveRecord::Base
validates_presence_of :title, :description, :speaker, :location
has_many :stories
belongs_to :user
end
而這裏的story.rb型號:
class Story < ActiveRecord::Base
after_create :create_initial_vote
validates_presence_of :name
belongs_to :user
belongs_to :keynote
has_many :votes do
def latest
find :all, :order => 'id DESC', :limit => 3
end
end
protected
def create_initial_vote
votes.create :user => user
end
end
你的用戶模型定義在哪裏?這是問題的第一部分;它不認爲有一個「基調」關係/方法。 –
@DaveNewton我剛剛添加了上面的用戶模型定義,以及基調和故事模型。 –
好吧,沒有'keynote'方法,就像錯誤說的那樣 - 關係是'keynotes',因爲它是'has_many'。我認爲*你想要做的是通過傳遞給'create'方法的ID找到用戶的基調? –