Как я могу передать project_id на стадии формы на странице шоу проекта в рельсах - PullRequest
0 голосов
/ 15 января 2020

У меня есть проект лесов и другие леса в качестве сцены. Я добавил кнопку формы этапа на странице шоу проекта. Теперь я хочу передать идентификатор каждого проекта в стадии, как я могу сделать это в рельсах? У меня есть много к одной связи между стадией и проектом.

rout.rb

  resources :stages
  resources :projects
  root to: 'home#index'

projects_controller.rb

  def index
    @projects = current_user.projects.all.paginate(page: params[:page], per_page: 15)
  end

  def show
    @stages = Stage.all
  end
  def new
    @project = current_user.projects.build
  end

Project Show. html .erb

  <%= link_to "Add Stage", new_stage_path, :class=>"button primary small" %>

модель проекта. Rb

  has_many :stages

модель проекта. Rb

belongs_to :project

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Один из способов сделать это - использовать вложенные маршруты :

rout.rb

resources :projects do
  resources :stages
end

Это создаст маршруты примерно так:

project_stages      GET          /projects/:project_id/stages(.:format)             stages#index
                    POST         /projects/:project_id/stages(.:format)             stages#create
new_project_stage   GET          /projects/:project_id/stages/new(.:format)         stages#new
edit_project_stage  GET          /projects/:project_id/stages/:id/edit(.:format)    stages#edit
project_stage       GET          /projects/:project_id/stages/:id(.:format)         stages#show
                    PATCH        /projects/:project_id/stages/:id(.:format)         stages#update
                    PUT          /projects/:project_id/stages/:id(.:format)         stages#update
                    DELETE       /projects/:project_id/stages/:id(.:format)         stages#destroy

show. html .erb

<%= link_to "Add Stage", new_project_stage(@project), :class=>"button primary small" %>

stage_controller.rb

def create
  @project = Project.find(params[:project_id])
  @stage = @project.stages.build(stages_params)
  @stage.save
end

Итак, мы добавили сюда вложенный ресурс, потому что этап принадлежит проекту. Таким образом, мы всегда получим проект, на котором мы добавляем этап, а не отправляем его вручную.

0 голосов
/ 15 января 2020

это можно легко исправить, передавая project_id в путь к форме.

<%= link_to "Add Stage", new_stage_path(project_id: @project.id), :class=>"button primary small" %>

, затем в вашем stage_controller.rb

def new
  @project = Project.find(params[:project_id])
  @stage = @project.stages.build
end

, находясь в projects_controller.rb

def show
  @project=Project.find(params[:id])
  @stages = Stage.all
end

ОДНАКО, Я настоятельно рекомендую вам внедрить вашу ассоциацию, используя Nested Resource для простоты разработки и обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...