Как создать планировщик запросов с помощью ruby ​​on rails?

Я создаю приложение, которое требует от пользователей планирования времени встреч/бесед с наставниками. Я с трудом выстраиваю это. Я читал об ассоциации has_many :through =>, но я знаю, что поступаю неправильно.

В моем 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 и должен присутствовать контент. Я попытался создать запрос, используя модальное представление на странице показа наставника, но содержимое не сохраняется, и я проверяю, что присутствие должно быть истинным, а затем, когда он перенаправляется на mentor_requests/new.html.erb, идентификатор наставника больше не присутствует .

Я не знаю, представил ли я достаточно информации, но мне здесь очень нужна помощь. Если я на правильном пути, что мне нужно сделать, чтобы это заработало, и если все это неправильно, что мне сделать, чтобы получить то, что я хочу.

Большое спасибо

Джуд


person user2495516    schedule 18.06.2013    source источник


Ответы (1)


сделайте свой маршрут mentor_request вложенным в mentor. Поскольку запрос наставника не имеет смысла без контекста наставника, это идеальное место для вложенного ресурса.

    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 или просто снять проверку, если она вам не нужна.

person jvans    schedule 18.06.2013
comment
Большое спасибо! Это действительно помогло мне, я работал над этим несколько недель и не знал о вложенных ресурсах. Вы мне очень помогли - person user2495516; 19.06.2013