我有一個創建項目的窗體。該表格收集兩個表格的數據; 'projects'和'projects_users'。最後一個 是一個關係表,用於存儲哪些用戶是項目成員(在表單中選擇)。在數據庫中創建帖子時發生問題
創建一個新的項目工作正常,但是當涉及到創造「projects_users」它沒有新的職位:
uninitialized constant ProjectsController::Projects_users
首先,我在正確的方式思考(見下面的代碼) ?
我所做的是我從params [:project]中提取成員數組,這是從表單中檢索的。然後我在數據庫中創建項目,當完成後,我遍歷成員數組(其中包含user_id)並在數據庫中爲'projects_users'創建帖子。
我在做什麼錯?有沒有更好的方法來實現我想要的?
項目控制器:
class ProjectsController < ApplicationController
def new
@project = Project.new
@users = (current_user.blank? ? User.all : User.find(:all, :conditions => ["id != ?", current_user.id]))
end
def create
@members = params[:project].delete(:members)
@project = Project.new(params[:project].merge(:user_id => current_user.id))
if @project.save
@members.each do |member|
@project_members = Projects_users.new
@project_members.project_id = @project.project_id
@project_members.user_id = member.user_id
end
redirect_to @project
else
@users = (current_user.blank? ? User.all : User.find(:all, :conditions => ["id != ?", current_user.id]))
render :new
end
end
end
new.html.erb:
<%= form_for @project do |f| %>
<div class="alert alert-block">
<%= f.error_messages %>
</div>
<div class="text_field">
<%= f.label :title%>
<%= f.text_field :title%>
</div>
<div class="text_field">
<%= f.label :description%>
<%= f.text_field :description%>
</div>
<div class="dropdown">
<%= f.label :start_date%>
<%= f.date_select :start_date %>
</div>
<div class="dropdown">
<%= f.label :end_date%>
<%= f.date_select :end_date %>
</div><br/>
<span class="help-block">Välj användare som ska ingå ingå i projektet.</span>
<div class="checkbox">
<% @users.each do |user| %>
<%= check_box_tag "project[members][]", user.id, '1', :id => "user_#{user.id}" %>
<%= label_tag "user_#{user.id}", user.first_name + ' ' + user.last_name, :class => "checkbox" %>
<% end %>
</div>
</div>
<div class="submit">
<%= f.submit "Spara" %>
</div>
<% end %>
項目模型:
class Project < ActiveRecord::Base
has_and_belongs_to_many :users, :class_name => 'User'
belongs_to :user
has_many :tickets, :dependent => :destroy
// validation...
# Setup accessible (or protected) attributes for your model
attr_accessible :user_id, :title, :description, :start_date, :end_date
end
個用戶模式:
class User < ActiveRecord::Base
attr_accessible :first_name, :last_name, :email, :password
has_and_belongs_to_many :projects
has_many :tickets
... other code
end
projects_users表:
project_id
user_id
項目表:
user_id (the user that creates the project = admin)
title
description
start_date
end_date
非常感謝您的回答!在你的解決方案中,projects_users表在哪裏使用? @ project.user_ids是指項目表,而不是我假設的'project_users'?項目表中的字段user_id僅存儲項目創建者的user_id。 – holyredbeard 2013-02-10 17:50:42
是的,這是鐵路協會的魔力。它只是添加這些user_ids加入/關聯表,在這種情況下,它是projects_users。 :) – 2013-02-10 18:00:54
啊,真的很酷!會立即嘗試一下!:) – holyredbeard 2013-02-10 21:15:14