2

役割を持つ特定のユーザーにいくつかのホステル属性を割り当てる必要があるこのプロジェクトに取り組んでいます。devise、rolify、cancanを使ってホステルモデルとユーザーモデルを作成しました。また、属性としてホステル ID とユーザー ID を持つ割り当てモデルも作成しました。以下は、より良いチェックのための私のコードです。

私のホステルモデル

class Hostel < ActiveRecord::Base

  has_many :assign_hostels

  attr_accessible :name, :location, :picture
  default_scope :order => 'id DESC'
end

ユーザーモデル

class User < ActiveRecord::Base
  has_many :assign_hostels

  attr_accessible :email, :password, :first_name, :lastname, :oname
  rolify
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

end

私の assign_hostel モデル

class AssignHostel < ActiveRecord::Base
  belongs_to :user
  belongs_to :hostel
  attr_accessible :user_id, :room_id
  validate :user_id, :uniqueness => true
end

私のホステルのページで、ホステルのリストを作成した後。ポーターの役割を持つすべてのユーザーをリストする新しい割り当てページを開くホステルの割り当てボタンを作成しました

<%= link_to 'Assign', accommodation_new_assign_hostel_path(:id => hostel.id) %>

コントローラーの新しい割り当て

def new_assign_hostel
  @search = Search.new(:user, params[:search], :per_page => 2)
  @search.order = 'email'
  @users = @search.run
  @hostel = Hostel.find(params[:id])
  @porters = Role.find_by_name('porter').users
  @assign_hostel = AssignHostel.new(:hostel_id => params[:hostel_id])
  respond_to do |format|
    format.js
  end
end

私の新しい割り当てページで、これを作成しました

<% @porters.each do |porter| %>

  <%= porter.email %>

  <%= render 'assign_hostel_form' %>

<% end %>

以下の assign_hostel_form パーシャル

<%= form_for @assign_hostel, url: accommodation_create_assign_hostel_path(:hostel_id => @hostel.id) do |f| %>

  <%= f.hidden_field :hostel_id, value: @assign_hostel.hostel_id %>

  <%= f.hidden_field :user_id, value: @assign_hostel.user_id %>

  <%= f.submit "Assign" %>
<% end %>

しかし、割り当てボタンをクリックした後、ホステルまたはユーザーIDを選択していないようです。どうすればこれを解決できますか。

4

1 に答える 1

0

私には古典的な関係のように見えますhas_many :through:

ここに画像の説明を入力

これを試してみませんか:

class User < ActiveRecord::Base
  has_many :hostels, :class_name => 'Hostel', :through => :assign_hostels, dependent: :destroy
  has_many :assign_hostels, :class_name => 'AssignHostel'

  attr_accessible :email, :password, :first_name, :lastname, :oname
  rolify
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

end

class Hostel < ActiveRecord::Base

  has_many :users, :class_name => 'User', :through => :assign_hostels, dependent: :destroy
  has_many :assign_hostels, :class_name => 'AssignHostel'

  attr_accessible :name, :location, :picture
  default_scope :order => 'id DESC'
end
于 2013-10-16T08:47:01.493 に答える