не удалось установить project_id в базу данных во вложенном маршруте - PullRequest
0 голосов
/ 04 февраля 2020

Я создал проект леса с ответственностью один-ко-многим. Я могу представить форму ответственности, но не могу установить project_id в таблицу ответственности. я создал ассоциацию один ко многим.

вот мой код-

rout.rb

  resources :projects do
    resources :responsibilities
  end

форма ответственности. html .erb

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

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

  <div class="field">
    <%= form.label :responsibility_matrix %>
    <%= form.text_field :responsibility_matrix %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

liability_controller.rb

  def new
    @project = Project.find(params[:project_id])
    @responsibility = Responsibility.new
  end

1 Ответ

0 голосов
/ 04 февраля 2020

Шаг за шагом

Новое приложение

rails new bookstore

Добавить автора леса

rails g scaffold author name

Добавить книгу леса

rails g scaffold book name author:references

Обновление маршрутов

С

resources :books
resources :authors

К

resources :authors  do
    resources :books
end

Покажем ссылку на новую книгу в приложении / views / авторы / show. html .erb, добавьте

<%= link_to 'New book', new_author_book_path(@author) %> |

После создания первого автора и посещения http://localhost: 3000 / авторы / 1 / books / new у нас есть ошибка: NoMethodError in Books # new

undefined method `books_path'

Чтобы исправить, сначала в BooksController добавьте

before_action :set_author, only: [:new]

private
def set_author
  @author = Author.find(params[:author_id])
end

И в app / views / books / _form. html .erb

<%= form_with(model: book, url:[@author, book], local: true) do |form| %>

Посещение снова http://localhost: 3000 / авторы / 1 / books / new

NameError in Books # new

undefined local variable or method `books_path'

Исправлено в приложении / views / books / new. html. erb

Изменить

<%= link_to 'Back', books_path %>

на

<%= link_to 'Back', author_books_path(@author) %>

Теперь мы можем отрендерить http://localhost: 3000 / авторы / 1 / книги / новые

Я думаю, что здесь вы получили все, что вам нужно

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