2

has_many:throughリレーションのチェックボックス付きの通常のを持っています。私の問題は、新しいプロジェクトを作成できず、チェックボックスがオンになっていることです。「ユーザーが無効です」という検証エラーが発生します。これは本当に奇妙です。

ユーザーがチェックしていないプロジェクトを作成すると、プロジェクトが機能し、プロジェクトを編集しているときにチェックできます。

- 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)

つまり、プロジェクトを編集することはできますが、新しいプロジェクトを作成することはできません。何か案は?

編集:私は3つのモデル、ユーザー、プロジェクト、プロジェクトシップを持っています。最新のものは他のモデル間の関係です。プロジェクトを作成してユーザーリレーションをプロジェクトに渡そうとすると、問題が発生します。編集するとき、すべてが魅力のように機能します。

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

ProjectsController:

# 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

PS私は4.0.0.betaDSを使用しています

4

1 に答える 1

0

モデルをusers_ids保存するには保存する必要があり、それは機能しませんでした。そのため、IDを作成アクションに保存し、プロジェクトを保存した直後にIDを追加します。

于 2014-01-21T14:42:29.777 に答える