0

我已按照说明操作并尝试为 Rails 3.2.3 安装simple-private-messages gem。

我知道有很多关于“找不到没有 id 的 [model]”的问题,但它们有点老了,我无法使任何其他问题中发布的解决方案/想法起作用。

我发现这个问题中使用了相同的问题和相同的 gem 但没有提供明确的答案。我也认为问题不是由特定的宝石引起的。

我为安装插件所做的步骤:

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#index 中的 ActiveRecord::RecordNotFound 找不到没有 ID 的用户 Rails.root: /home/user/RoR/railsapp app/controllers/pmessages_controller.rb:59:in `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 行提出:未定义的方法 `login' for #User:0xab4dc3c 提取的源代码(在第 26 行附近):

以这种方式或任何其他方式为 User 赋值仍然会导致相同的错误消息:

@user = User.first
4

1 回答 1

1

首先,你的路线应该像

resources :users do
  resources :pmessages
end

所以user_id每个请求都有/users/:user_id/pmessages.

或者,您的set_user方法可能如下所示:

def set_user
  @user = current_user
end

所以@user总是指向当前用户(并且路由仍然可以是你设置的)。

其次,您的User模型没有称为登录的字段。如果您的模型中有username属性,您可以将其添加到模型中:alias_attribute :login, :username或者如果您希望电子邮件为 login: alias_attribute :login, :email

于 2012-05-27T09:30:14.130 回答