【发布时间】:2012-11-11 17:50:36
【问题描述】:
我的 has_many :through 关系有一个带有复选框的常规 for。我的问题是我无法创建新项目并选中复选框。我收到验证错误“用户无效”。这真的很奇怪。
如果我创建一个没有用户检查的项目,它可以工作,我可以在编辑项目时检查它们。
- User.each do |user|
%label.checkbox{title: user.email}
= check_box_tag 'project[user_ids][]', user.id, @project.user_ids.include?(user.id)
= truncate(user.full_name, length: 16)
简而言之:我可以编辑项目,但不能创建新项目。有什么想法吗?
编辑: 我有三个模型,用户、项目、项目,其中最新的是其他模型之间的关系。当我试图创建一个项目并将用户关系传递给它时,我的问题就出现了。编辑时,一切都像魅力一样。
User
id
email
has_many :projectships, dependent: :destroy
has_many :projects, through: :projectships
Project
id
name
has_many :projectships, dependent: :destroy
has_many :users, through: :projectships
Projectship
id
user_id
project_id
belongs_to :project
belongs_to :user
validates :project_id, presence: true
validates :user_id, presence: true
项目控制器:
# GET /projects/new
def new
@project = Project.new
end
# POST /projects
def create
@project = Project.new(project_params)
if @project.save
redirect_to @project, notice: t('flash.project_created')
else
render :new
end
end
# GET /projects/:id/edit
def edit
@project = Project.includes(:users).find(params[:id])
end
# PUT /projects/:id
def update
@project = Project.find(params[:id])
if @project.update_attributes(project_params)
redirect_to :back, notice: t('flash.project_updated')
else
render :edit
end
end
private
def project_params
params.require(:project).permit(
:client_id, :currency, :description, :end_date, :estimated_hours,
:fixed_price, :hourly_rate, :name, :start_date, :status,
:billable_type, :user_ids
)
end
P.S 我用的是 4.0.0.beta D.S
【问题讨论】:
-
听起来你的模型有问题,你能分享一下吗?控制台中的
User.create!有效吗? -
我更新了我的问题。当我试图创建一个具有“projectships”关系的项目时。
-
只是想知道您是如何在控制器中处理创建与更新操作的?有什么不同吗?
-
听起来最有可能的问题是用户无效。用户是否有验证,你确定他们通过了吗?
-
不,我在创建操作中使用“保存”,在更新操作中使用“update_attributes”
标签: ruby-on-rails ruby-on-rails-4