2011-01-29 8 views
3

これは一貫していないと申し訳ありません...私はすべてのRuby/Railsの用語を(まだ)知っていません。Railsでリンクされたモデルの属性にアクセスする

私は「プロファイル」と呼ばれるモデルと呼ばれるモデルがあります:インデックス 『と『そのIプロファイルのショー』ビュー「ユーザーを、そして2は、このようにリンクされている中で、今

class Profile < ActiveRecord::Base 
belongs_to :user 
class User < ActiveRecord::Base 
has_one :profile 

』作られた、私は、Userモデルから属性「名前」にアクセスできるようにしたい私はこれを行うことができますどのように私は、私はこのようになりますコントローラで何かをする必要があります想像:。?

class ProfilesController < ApplicationController 
    def show 
    @user = User.find(params[:user_id]) 

そしてアクセス次のように表示されます:

<%= @user.name %> 

しかし、そのコードのビットは正しく動作しません。

ありがとうございました。

+0

「うまくいかない」方法の詳細を教えてください。エラー画面? – Mauricio

答えて

0

コントローラが動作するはずです。その部分は正しい。

いくつかの質問

プロフィールはuser_idのを持っていますか?

Profileの属性user_idを作成し、Userのprofile_idを作成した移行を実行しましたか?

+0

'Profile'にuser_id属性がありますが、 'User'にはprofile_id属性がありません。そこにあるはずですか?また、SQL DBをチェックすると、各プロファイルでuser_id列が空白になります。それは...正しいことができません。 – rottendevice

+0

Hmm .. **あなたがモデルで関係を実装した後に**プロファイルが作成されましたか? – Trip

4

属性nameはあなたのビューでは、プロフィールモデルに属している場合:

<%= @user.profile.name %> 

属性nameユーザーモデルに属している場合は、サーバーを停止するrake db:migrateを実行してくださいすべての移行がデータベースに適用されていることを確認してください。その後、attribeは、お使いのモデルのために働いているかどうかを確認するためにrails consoleまたはruby script/consoleを実行します。

> u = User.first 
> u.name 

最後のコマンドは、空の文字列またはあなたの最初のユーザーの名前を返した場合、すべてが動作しています。 NoMethodError: undefined methodを取得した場合は、name属性を処理する列が不足している可能性があるため、データベースを確認する必要があります。

+0

ありがとう!属性 'name'はUserモデルの一部であり、railsコンソールコマンドを実行すると、DBの最初のUserの文字列が返されます。つまり、プロファイルビューでUser.nameにアクセスするにはどうすればいいですか? – rottendevice

+0

'<%= @ user.name%>'の代わりに '<%= @ user.inspect%>'を試して、ロードしようとしているレコードがコントローラに正しくロードされているかどうかを確認してください。ブラウザでビューを編集して再読み込みします。 – lbz

関連する問題