找不到[model]没有和id,Rails 3.2.3

时间:2012-05-27 09:09:05

标签: ruby-on-rails ruby-on-rails-3

我已按照说明操作,并尝试为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

1 个答案:

答案 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