Rails3, неизвестный ключ (ы): client_id, по ассоциации belongs_to

#ruby-on-rails #associations

#ruby-on-rails #ассоциации

Вопрос:

Я уже некоторое время ищу, но Google мне не очень помогает. Ошибка ArgumentError Unknown key(s): client_id появляется в ProjectsController:

 # projects_controller.rb

class Management::ProjectsController < Management::ManagementController
  def index
    @projects = Project.find( :client_id => current_user.client )
  end
end
  

Это модель проекта:

 # project.rb

class Project < ActiveRecord::Base
  belongs_to :client
end
  

Это клиентская модель:

 # client.rb

class Client < ActiveRecord::Base
  has_many :projects
end
  

И, наконец, миграция:

 # 20110404155917_create_projects.rb

class CreateProjects < ActiveRecord::Migration
  def self.up
    create_table :projects do |t|
      t.string :name
      t.datetime :date
      t.text :description
      t.integer :client_id
      t.timestamps
    end
  end

  def self.down
    drop_table :projects
  end
end
  

Должно быть возможно, верно?

Не вижу, чего мне здесь не хватает..

У кого-нибудь есть предложение?

Спасибо!

Ответ №1:

Использовать

 @projects = Project.where( :client_id => current_user.client.id)
  

или

 @projects = Project.find_by_client_id(current_user.client.id)
  

Комментарии:

1. 1 Я просто набирал в точности то же самое 🙂 Вы также можете использовать @projects = Project.where(:client => current_user.client)

2. Или @projects = Project.find(:first,:conditions=>{ :client_id => current_user.client.id})

3. Действительно, это все! Думая об этом, я уже допускал эту ошибку раньше.. Как я мог забыть? Что ж, теперь это работает, и я записываю это! Спасибо! ——- РЕДАКТИРОВАТЬ: я все еще нахожу странным, что он выдает ошибку «Неизвестный ключ (ы)», потому что это заставляет вас поверить, что это работает, но вы не можете найти ключ (ы) в таблице..

Ответ №2:

или вы могли бы сделать

 @projects = current_user.client.projects
  

Может быть, немного чище?

Комментарии:

1. Это действительно чище, но пока я изменил код на этот: @projects = params[:client_id] ? Project.where( :client_id => params[:client_id] ) : Project.all Поэтому я не могу использовать его для этого, но буду иметь это в виду.. Спасибо!