我已按照说明操作,并尝试为Rails 3.2.3安装simple-private-messages gem。
我知道有很多关于“找不到没有id的[模型]”的问题,但是它们稍微陈旧,我无法在任何其他问题中发布解决方案/想法。
我发现同样的问题和this question中使用的同一个宝石,但没有提供明确的答案。我也认为问题不是由特定的宝石引起的。
我已经完成安装插件的步骤:
Added plugin to gemfile, ran bundle install
rails generate simple_private_messages:model User Pmessage
Added this line to user.rb : has_private_messages :class_name => "Pmessage"
rails generate simple_private_messages:scaffold User Pmessage
Uncommented this line in pmessage.rb : attr_accessor :to
然后我将其添加到我的routes.rb: 匹配'/ pmessages',到:'pmessages #index'
访问/ pmessages会产生以下错误消息:
PmessagesController中的ActiveRecord :: RecordNotFound #index无法 找到没有ID的用户Rails.root:/ home / user / RoR / railsapp app / controllers / pmessages_controller.rb:59:在`set_user'
中
pmessages_controller包含 set_user 方法,这是问题的根源。
private
def set_user
@user = User.find(params:[user_id])
end
我有一个id = 1的有效用户记录,但是将麻烦的行更改为 @user = User.find(1)并访问/ pmessages会导致出现此错误消息:
显示/home/user/RoR/railsapp/app/views/pmessages/_inbox.html.erb 第26行引出:#User的未定义方法`login':0xab4dc3c 提取的来源(第26行):
以这种方式或以任何其他方式为用户分配值仍会产生相同的错误消息:
@user = User.first
答案 0 :(得分:1)
首先,您的路线应该像
resources :users do
resources :pmessages
end
因此user_id
的每个请求都有/users/:user_id/pmessages
。
或者,您的set_user
方法可能如下所示:
def set_user
@user = current_user
end
所以@user
始终指向当前用户(路由仍然可以是您设置的目的)。
其次,您的User
模型没有名为login的字段。如果您的模型中有username
属性,您可以将其添加到模型中:alias_attribute :login, :username
或者如果您希望电子邮件登录:alias_attribute :login, :email
。