任何人都知道如何修复此错误?这是更多信息 -
错误消息:
NoMethodError in PostsController#create
undefined method `update' for nil:NilClass
PostsController创建:
class PostsController < ApplicationController
def create
@twitter_user.update(@post.content)
end
以下是我在user.rb模型中定义@twitter_user的方法
def twitter
unless @twitter_user
provider = self.authentications.find_by_provider('twitter')
@twitter_user = Twitter::Client.new(:token => provider.token, :secret => provider.secret) rescue nil
end
@twitter_user
end
由于
答案 0 :(得分:3)
如果您的用户模型中定义了@twitter_user
,则无法在控制器中访问它。具有@
前缀的方法中的变量属于该类的实例。
如果要访问控制器中的@twitter_user
,可以将该twitter方法移动到应用程序控制器:
class ApplicationController
def twitter
unless @twitter_user
provider = User.find_by_provider('twitter')
@twitter_user = Twitter::Client.new(:token => provider.token, :secret => provider.secret) rescue nil
end
@twitter_user
end
end
然后您可以使用twitter
:
class PostsController < ApplicationController
def create
twitter.update(@post.content)
end
答案 1 :(得分:0)
模型和控制器不共享实例变量,因此@twitter_user
中的PostsController
与User
类中的ActiveRecord::Base
不同(我认为@twitter_user
类来自class User < ActiveRecord::Base
def twitter_user
provider = self.authentications.find_by_provider('twitter')
Twitter::Client.new(:token => provider.token,
:secret => provider.secret)
rescue
return nil
end
end
class PostsController < ApplicationController
def create
# I suppose your User instance is accessible
# through the method current_user
@twitter_user = current_user.twitter_user
@twitter_user.update(@post.content)
end
end
1}})。您必须在控制器内初始化{{1}}。
您可以像这样重构代码:
{{1}}