1

だから、私は親子関係を可能にするはずのモデルTaskを持っています。モデル定義の関連部分は次のとおりです。

class Task < ActiveRecord::Base

  attr_accessible :relationships_attributes

  has_many :relationships, :foreign_key => "subtask_id", :dependent => :destroy
  has_many :parents, :through => :relationships, :source => "parent"

  has_many :reverse_relationships, :foreign_key => "parent_id", :class_name => "Relationship", :dependent => :destroy
  has_many :subtasks, :through => :reverse_relationships, :source => "subtask"

end

リレーションシップ モデルの定義は次のとおりです。

class Relationship < ActiveRecord::Base

  attr_accessible :parent_id

  belongs_to :parent, :class_name => "Task"
  belongs_to :subtask, :class_name => "Task"

  validates :parent_id, presence: true
  validates :subtask_id, presence: true

end

私がしたいのは、特定のタスクの親タスク ID を選択/削除できるチェック ボックスを含むフォームを使用して、基礎となる「関係」データベース テーブルに存在するエントリを変更することです。これは、check_box_tag の edit.html.erb ファイルにあるコードです。

<p>
  <br>
  <%= f.label :parent_tasks %>
  <% for task in Task.find(:all) %>
  <div>
    <%= check_box_tag "subtask[parent_ids][]", task.id, @task.parent_ids.include?(task.id)%>
    <%= task.id %>
  </div>
  <% end %>
</p>

フォームの [保存] ボタンを押すと、エラーは発生しませんが、チェック ボックスで行った変更は保存されません。ログには次のエントリが表示されます (関係テーブルからの削除/挿入は試行されません)。

Started PUT "/dev/tasks/25" for 127.0.0.1 at 2012-04-30 14:59:13 -0400
Processing by Dev::TasksController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"+ShrgdwgD7G1l9iDEuCsZ84d9XCwXh01p3BwJARJScE=", "task"=>{"name"=>"task bla", "description"=>"", "project_id"=>"", "task_status_id"=>"1"}, "subtask"=>{"parent_ids"=>["19", "22"]}, "commit"=>"Save changes", "id"=>"25"}
  User Load (0.8ms)  SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'z7IrWT7R7u7i6nhW26J2Og' LIMIT 1
  Task Load (0.3ms)  SELECT "tasks".* FROM "tasks" WHERE "tasks"."id" = $1 LIMIT 1  [["id", "25"]]
   (0.1ms)  BEGIN
   (0.1ms)  COMMIT
Redirected to http://localhost:3000/dev/tasks
Completed 302 Found in 8ms (ActiveRecord: 1.3ms)

私は以前、Teams_users という結合モデルを持つ 2 つの異なるモデル User と Team に対して達成しようとしている機能を実装していました。これは、teams_users データベース テーブルへの変更を正常に保存したアクションのログです。

Started PUT "/teams/1" for 127.0.0.1 at 2012-04-30 14:46:11 -0400
Processing by TeamsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"+ShrgdwgD7G1l9iDEuCsZ84d9XCwXh01p3BwJARJScE=", "team"=>{"name"=>"My team", "user_ids"=>["3", "8", "9", "100", "101"]}, "commit"=>"Save", "id"=>"1"}
  Team Load (0.3ms)  SELECT "teams".* FROM "teams" WHERE "teams"."id" = $1 LIMIT 1  [["id", "1"]]
   (0.1ms)  BEGIN
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" IN (3, 8, 9, 100, 101)
  User Load (0.4ms)  SELECT "users".* FROM "users" INNER JOIN "teams_users" ON "users"."id" = "teams_users"."user_id" WHERE "teams_users"."team_id" = 1
   (0.2ms)  DELETE FROM "teams_users" WHERE "teams_users"."team_id" = 1 AND "teams_users"."user_id" IN (2, 4)
   (38.3ms)  INSERT INTO "teams_users" ("team_id", "user_id") VALUES (1, 3) RETURNING "id"
  Team Exists (0.4ms)  SELECT 1 FROM "teams" WHERE (LOWER("teams"."name") = LOWER('My team') AND "teams"."id" != 1) LIMIT 1
   (39.9ms)  COMMIT
Redirected to http://localhost:3000/teams/1
Completed 302 Found in 88ms (ActiveRecord: 81.0ms)

現在のコードを機能させるために必要な変更が小さく、誰かがそれらまたは私がまだ遭遇していない関連する投稿に私を向けることができることを願っています:)。

4

0 に答える 0