неопределенный метод `project 'для nil: NilClass - PullRequest
0 голосов
/ 22 января 2020

Я создал проектные леса и строительные леса со многими ассоциациями. Теперь я добавил леса со многими в одну ассоциацию со сценой. Но я не могу правильно отобразить форму задачи. ошибка

rout.rb:

  resources :projects do
    resources :stages do
        resources :tasks
    end
  end

форма задачи. html .erb

<%= form_with(model: task, url: projects_stages_tasks_path(@stages, @stages.project), local: true) do |form| %>
  <% if task.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(task.errors.count, "error") %> prohibited this task from being saved:</h2>

      <ul>
      <% task.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :task_name %>
    <%= form.text_field :task_name %>
  </div>
  <div class="actions">
    <%= form.submit 'Create', :class=>'button primary small' %>
  </div>
<% end %>

tasks_controller.rb

  def index
    @tasks = Task.all
  end

  def new
    @task = Task.new
  end

1 Ответ

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

Из того, что вы написали, я понимаю, что вы пытаетесь создать форму task как вложенный ресурс. Поэтому я бы сделал что-то вроде этого: во-первых, убедитесь, что вы устанавливаете переменные @project и @stage в вашей tasks_controller:

before_action :set_project
before_action :set_stage

# ...

private

def set_project
  @project = Project.find(params[:project_id])
end

def set_stage
  @stage = @project.stages.find(params[:stage_id]) # Project#stages association is assumed to exist here
end

, затем установите переменную @task в само действие, например:

def new
  @task = @stage.tasks.build # Stage#tasks association is assumed to exist here
end

, тогда, по вашему мнению, вы можете использовать обычную форму, где вам не нужно будет указывать URL самостоятельно (ну, я думаю):

<%= form_with model: [@project, @stage, @task] do |f| %> 

et c.

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