Rails - не могу сказать создать контроллер, какой элемент создать

У меня есть несколько моделей:

  • Пользователь
  • Отношение
  • Проект
  • Расписание

  • Экземпляр user может быть типа :student или :employer.

  • А schedule belongs_to и project и
  • a project has_one schedule
  • project belongs_to и student и student has_many projects.

  • Связь принадлежит студенту, а связь также принадлежит работодателю. Работодатель и студент имеют отношения has_many.

Я пишу контроллер для создания расписания и не могу понять, как сообщить контроллеру, к какому проекту относится расписание. Вот что у меня есть на данный момент

def create 
    if current_user.type == 'Employer'
        redirect_to employer_profile_path(current_user.profile_name) 
    else
        @schedule = Schedule.find(params[:id])
        if @schedule.save(schedule_params)     
            flash[:notice] = "Successfully created schedule."
            redirect_to profile_path(current_user.profile_name)  #change to project path later
        else
            render :action => 'new', :notice => 'Invalid Schedule'
        end
    end
end

private
def schedule_params
      params.require(:schedule).permit(tasks_attributes: [:title, :content, :_destroy]) 
end

Я почти уверен, что неправильно определяю @schedule. Маршруты по расписанию:

resources :schedules

Как сообщить контроллеру, к какому проекту относится расписание?


person Philip7899    schedule 21.11.2013    source источник


Ответы (1)


Предполагая, что вы опубликовали действие создания для SchedulesController, нет необходимости:

@schedule = Schedule.find(params[:id])

это, вероятно, вернет nil, потому что нет расписания (в конце концов, это то, что вы хотите create здесь).

@schedule = Schedule.new(schedule_params) 

если вы хотите назначить проект расписанию, вам необходимо отправить эту информацию, чтобы вы могли получить к ней доступ в хэше params. Что-то типа:

@schedule.project = Project.find(params[:project_id])
person wpp    schedule 21.11.2013
comment
Спасибо, только что попробовал. Он говорит, что не может найти проект без идентификатора. - person Philip7899; 22.11.2013