【问题标题】:Couldn't find [model] without and id, Rails 3.2.3找不到没有和 id 的 [model],Rails 3.2.3
【发布时间】:2012-05-27 09:09:04
【问题描述】:

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

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

我发现this question 中使用了相同的问题和相同的 gem,但没有提供明确的答案。我也认为问题不是由特定的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 行提出:#User:0xab4dc3c 的未定义方法“登录” 提取的源代码(第 26 行附近):

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

@user = User.first

【问题讨论】:

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


    【解决方案1】:

    首先,你的路线应该是这样的

    resources :users do
      resources :pmessages
    end
    

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

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

    def set_user
      @user = current_user
    end
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多