не в состоянии установить данные в базу данных в рельсах - PullRequest
1 голос
/ 22 января 2020

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

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

<%= form_with model: [@project, @stage, @task] 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 new
  @task = @stage.tasks.build
  end

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

    @task = @project.stages.build(task_params)
    #@task = Task.new(task_params)

    respond_to do |format|
      if @task.save
        format.html { redirect_to @task, notice: 'Task was successfully created.' }
        format.json { render :show, status: :created, location: @task }
      else
        format.html { render :new }
        format.json { render json: @task.errors, status: :unprocessable_entity }
      end
    end
  end
  private
    def set_task
      @task = Task.find(params[:id])
    end

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

    def set_stage
      @stage = Stage.find(params[:stage_id])
    end

    def task_params
      params.require(:task).permit(:task_name)
    end

Ответы [ 2 ]

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

Хорошо, я вижу, что не так. У вас есть

@task = @project.stages.build(task_params)

, поэтому вы создаете Stage вместо Task экземпляра здесь. Что вам действительно нужно:

@task = @stage.tasks.build(task_params)

Я также призываю вас приложить некоторые усилия для того, чтобы действительно понять, что вы здесь делаете, если вы не хотите задавать вопрос по SO каждые полчаса своего развития. ;)

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

Это заставило меня улыбнуться, потому что, как новый программист, мы склонны копировать и вставлять, но забываем, что если мы не поймем, мы не можем go так далеко: -)

Внутри метода создания, в строке : @project = Project.find(params[:project_id]) вы ожидаете, что params будет иметь project_id, но вы не передали его в форме, и чтобы передать его в форме, вам нужно иметь его на первом месте в new действии.

Do это:

  def new
    @task = @stage.tasks.build
    @project = @stage.project
  end

, а затем добавить это внутри формы:

  <%= form.hidden_field :project_id, value: @project.id %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...