#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
Поэтому я не могу использовать его для этого, но буду иметь это в виду.. Спасибо!