0

ユーザーがメンターとの予定/会話時間をスケジュールする必要があるアプリケーションを構築しています。私はこれを構築するのに苦労しています。私は has_many :through => Association について調べてきましたが、これについて間違った方法で行っていることはわかっています。

私の User.rb で

Class User < ActiveRecord::Base

  has_many :mentor_requests, foreign_key: "user_id"
  has_many :mentors, through: :mentor_requests

  def requested?(mentor) 
    mentor_requests.find_by_mentor_id(mentor.id)
  end

  def request!(mentor_request)
    mentor_requests.create!(mentor_request)
  end

  def unrequest!(mentor)
    mentor_requests.find_by_mentor_id(mentor.id).destroy
  end
end

私のMentor.rbで

class Mentor < User

  has_many :mentor_requests, foreign_key: "mentor_id"
  has_many :users, through: :mentor_requests
end

Mentor_request.rb で

class MentorRequest < ActiveRecord::Base
  attr_accessible :reason, :mentor_id

  belongs_to :user, class_name: "User"
  belongs_to :mentor, class_name: "Mentor"

  validates :user_id, :mentor_id, presence: true 
  validates :reason, presence:true, length: { maximum: 140 }

  default_scope order: 'mentor_requests.created_at DESC'
end

私のリクエストではコントローラーは

def create
  @mentor_request = current_user.mentor_requests.build(params[:mentor_request])
  #current_user.request!(@mentor)
  if @mentor_request.save
    flash[:success] = "Your request has been sent"
redirect_to user_path(current_user)
#Send confirmations to both user and mentor
#Send the notification to an internal message inbox
  else
render "new"
  end
end

mentor_requests/new.html.erb のビューに移動してリクエストを送信しようとすると、mentor_id が存在する必要があり、コンテンツが存在する必要があると表示されます。メンターの表示ページからモーダル ビューを使用してリクエストを作成しようとしましたが、コンテンツが保存されず、プレゼンスが true である必要があることを検証し、mentor_requests/new.html.erb にリダイレクトすると、メンター ID が存在しなくなりました.

十分な情報を提示したかどうかわかりませんが、ここで真剣に助けが必要です. 私が正しい道を進んでいる場合、それを機能させるために何をする必要がありますか、そしてこれがすべて間違っている場合、私が望むものを得るために私は何をしますか.

どうもありがとう

ジュード

4

1 に答える 1

0

mentor_request ルートをメンターの下にネストします。メンターのリクエストは、メンターのコンテキストがなければ意味がないため、ネストされたリソースに最適な場所です。

    resources :mentors do 
       resources :mentor_requests
    end

これにより、ルートが /mentors/1/mentor_requests のようになります

そして、コントローラーには params[:mentor_id] もあるので、それを作成します

   def create
     @mentor_request = current_user.mentor_requests.build(params[:mentor_request])
     @mentor_request.mentor = Mentor.find(params[:mentor_id])
   end

コンテンツ エラーについては、mentor_request で必須のフィールドであるように思われます。それを戻して mentor_request に割り当てるか、必要ない場合は検証を外す必要があります。

于 2013-06-18T03:06:25.140 に答える