Witam!
W moim projekcie mam następujące tabele: Projects, Users, Clients. HABTM jest pomiędzy Projects i Users. Modele wyglądają tak:
[code]class Client < ActiveRecord::Base
has_many :projects, :dependent => :destroy
…
end
class Project < ActiveRecord::Base
has_many :hours, :dependent => :destroy
belongs_to :client
has_and_belongs_to_many :users
…
end
class User < ActiveRecord::Base
has_many :hours, :dependent => :destroy
has_and_belongs_to_many :projects
end[/code]
project_controller.rb
[code]def create
@project = Project.new(params[:project])
@clients = Client.find(:all)
@user = User.find(:all)
if @project.save
flash[:action_ok] = ‘Project was successfully created.’
redirect_to :action => ‘list’
else
render :action => ‘new’
end
end
def edit
@clients = Client.find(:all)
@project = Project.find(params[:id])
end
def update
params[:project][:user_ids] ||= []
@project = Project.find(params[:id])
if @project.update_attributes(params[:project])
flash[:action_ok] = ‘Project was successfully updated.’
redirect_to :action => ‘index’
else
render :action => ‘edit’
end
end[/code]
Fragment formularza wspólnego dla Edit i Create project:
<% for user in User.find(:all) %>
<%= check_box_tag "project[user_ids][]", user.id, @project.users.include?(user) %>
<%= user.name %>
<% end %>
Przy Edycji wszystko chodzi dobrze, natomiast przy tworzeniu nowego projektu jeśli odhaczę jeden checkbox, czyli przypiszę jednego Usera do Projektu to dostaję błąd w okienku walidacyjnym: “Users is invalid”
Jeśli odhaczę więcej to mam tych błędów więcej. Podejrzewam, że próbuje przypisać Usera do projektu, który jeszcze nie został stworzony. Może trzeba jakoś rozbić if @project.save, sam nie wiem …???
Kolejna rzecz, mam taki zapis:
@all_clients = Client.find(:all, :include => {:projects => :hours }, :order => "name, title")
Teraz jak to zmodyfikować, żeby pokazać tylko Projekty przypisane do danego Usera, czyli chcę wykorzystać moje HABTM. ID Usera mam w sesji. Próbowałem tak:
@all_clients = Client.find(:all, :include => {:projects => :hours },
:conditions => ['user_id = ?', session[:user_id]],
:order => "name, title")
Pokazuje inną listę projektów, ale to nie jest to co powinno być
Będę wdzięczny za wszelkie podpowiedzi.