0

ユーザーのジョブ ノートを取得しようとしていますが、何が間違っているのかわかりません。最初は、2 つだけをネストしたときにジョブとメモを適切に機能させることができましたが、ユーザーのジョブ メモを取得しようとすると、コードが壊れてしまいました。

注意事項 コントローラー新品

def new
  @note = @user_note.notes.new
end

private 

def user_note
    @user = current_user
    @job = @user.job.find(params[:job_id])
end

user.rb

has_many :jobs
has_many :notes, through: :jobs

ジョブ.rb

belongs_to :user
belongs_to :note

notes.rb

has_many :jobs
has_many :users, through: :jobs

Rails コンソールで次のコードを入力すると、正常に動作します。

User.last.jobs

以下にコーディングしようとしても、そうではありません

User.last.jobs.notes

その後、エラーが発生します

undefined method `notes' for #<Job:0x007fe37dc77190>

ジョブのメモを作成するときに user_id を正しく取得するにはどうすればよいですか? 現在、メモのジョブ ID を取得していますが、ユーザー ID は取得していません。ジョブとユーザーからメモを見つけられるようにしたいと考えています。私が間違っていることと、これを修正する方法はありますか?

4

3 に答える 3

1

基本的な欠点は、2 つの has_many 関係を介して質問していることです。これは不可能です。次のようなことができます:

user = User.last
user.jobs  # returns all the user's jobs
user.notes # returns all the user's notes
user.jobs.each_with_object({}) {|job, hash| hash[:job.id] = job.note_ids]} 
  # returns a hash with user's job_id as keys and an array of related note_ids as value
于 2012-06-24T06:04:49.567 に答える
1

を使用しているhas_many :throughので、次を使用する必要があります。

User.last.notes

これにより、ジョブを通じて最後のユーザーのメモが取得されます

于 2012-06-26T17:33:51.887 に答える
0

あなたのメモモデルにはタイプミスがあるようです。

has_many :jobs

それ以外の

has_jobs
于 2012-06-24T04:30:31.780 に答える