2016-06-23 8 views
0

wiki#editページで共同編集者を作成しました。HMABMの関係Railsのチェックボックスを経由して

私はcollaboratorsために結合テーブルを作成するために、私のschema.rbでこれを持っている:

create_table "collaborators", force: :cascade do |t| 
    t.integer "user_id" 
    t.integer "wiki_id" 
    end 

それでも私は両方userwiki IDのインデックスを追加しました私の最初の移行に:

class CreateCollaborators < ActiveRecord::Migration 
    def change 
    create_table :collaborators do |t| 
     t.integer :user_id, array: true, default: [] 
     t.integer :wiki_id 
    end 

    add_index :users, :id, unique: true 
    add_index :wikis, :id, unique: true 
    end 
end 

私はwikis#editページのこのerbを使用して、潜在的な共同編集者のリストを作成しようとします(ゆるやかにthis Railcastに従います):

<% if @wiki.private? %> 
    <%= f.label :collaborators, class: 'checkbox' %> 
    <%= @users.each do |user| %> 
     <%= check_box_tag "wiki[user_ids][]", user.id, @wiki.collaborators.include?(user.id) %> 
     <%= user.name %><br> 
    <% end %> 
    <% end %> 

は、今私は、uninitialized constant WikisController::Collaborator言って私のwikis_controllerに示された行にエラーを取得しています:

class WikisController < ApplicationController 
    def edit 
     @wiki = Wiki.find(params[:id]) 
     @users = User.all 
     collaborators = Collaborator.all <<<<<<<ERROR CALLED ON THIS LINE 
    end 

私は空白のcollaborators_controller作成しているが、コードとすべてがwikis#editページで行われ、I何を入れるべきか分からない。

誰でも私の手伝いをすることはできますか?私は間違った方法でそれに近づいているかもしれません...

+0

'app/models/collaborator.rb'ファイルがありますか? – Undo

+0

いいえ、私は 'users'と' wiki 'に対して 'has_many'という関係を実装しようとしましたが、奇妙な構文エラーが続いていました。 – Liz

答えて

0

habtm関係は、モデルのない単純な結合テーブルです。エラーが発生している結合表のモデルが存在しないため、Collaboratorを呼び出すことはできません。

モデルが必要な場合は、has_many:through relationshipに切り替えて共同モデルを作成できます。 has_many:throughでは、コラボレーター・テーブルは、純粋な結合テーブルとは異なり、主キー/ IDカラムを持つ必要があります。

は、そうでない場合は、次のような関連付けを呼び出すことができますHABTMと調和:

# Check if associated users include user 
@wiki.users.include?(user) 

# Get all users associated with wiki 
wiki.users 

# Get all wikis associated with user 
user.wikis 

あなたがテーブルを結合するための命名規則レールを使用していなかったので、あなたのモデルで、あなたは次のように結合表を指定する必要があります。

# models/wiki.rb 
has_and_belongs_to_many :users, :join_table => :collaborators 

# models/user.rb 
has_and_belongs_to_many :wikis, :join_table => :collaborators 
+0

これは非常に有益でした!ありがとうございました! – Liz