0

指示に従い、Rails 3.2.3 にsimple-private-messages gem をインストールしようとしました。

「id なしで [model] を見つけることができませんでした」という質問がたくさんあることは知っていますが、それらは少し古く、他の質問に投稿された解決策やアイデアを機能させることができませんでした。

この質問で同じ問題と同じ宝石が使用されていることがわかりましたが、明確な回答はありません。また、問題は特定の宝石が原因ではないと思います。

プラグインをインストールするために行った手順:

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 に追加しました: match '/pmessages', to: 'pmessages#index'

/pmessages にアクセスすると、次のエラー メッセージが表示されます。

ActiveRecord::RecordNotFound in PmessagesController#index 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 が発生しています: undefined method `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または、電子メールをログインさせたい場合は、alias_attribute :login, :email

于 2012-05-27T09:30:14.130 に答える