Не удалось передать идентификатор из индекса в рельсовую ассоциацию - PullRequest
1 голос
/ 07 февраля 2020

У меня есть модель Project с ассоциацией один ко многим с Financial, модель Financial имеет отношение один ко многим с моделью PaymentMilestone. Я хочу добавить new_payment_milestone_path к финансовому index.html.erb, но я не могу передать financial_id по нажатию кнопки.
Вот мой код:

финансовый индекс. html .erb

    <% @financials.each do |financial| %>
      <tr>
        <td><%= financial.responsibility %></td>
        <td><%= link_to " ", new_project_financial_payment_milestone_url(@financial, payment_milestone) %></td>
      </tr>
    <% end %>

financials_controller.rb

  def index
    @financials = @project.financials
  end

rout.rb

  resources :projects do
    resources :financials do
      resources :payment_milestones
        end
   end

Ответы [ 2 ]

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

Не go чокнутый в состоянии покоя:

Правило большого пальца: ресурсы никогда не должны быть вложены глубже, чем на 1 уровень. Может потребоваться, чтобы коллекция находилась в области видимости ее родителя, но к конкретному члену всегда можно получить доступ непосредственно по идентификатору, и для этого не требуется область видимости (если идентификатор не является уникальным по какой-то причине)
- Jamis Бак

Создание из ваших маршрутов пирамиды делает вещи намного сложнее, чем они должны быть на самом деле. Чтобы удалить вложения payment_milestones из проектов, вам нужно изменить маршруты на:

resources :projects do
  resources :financials
end

resources :financials, only: []
  resources :payment_milestones, shallow: true
end

Это создаст следующие маршруты:

     financial_payment_milestones GET    /financials/:financial_id/payment_milestones(.:format)                                   payment_milestones#index
                                  POST   /financials/:financial_id/payment_milestones(.:format)                                   payment_milestones#create
  new_financial_payment_milestone GET    /financials/:financial_id/payment_milestones/new(.:format)                               payment_milestones#new
           edit_payment_milestone GET    /payment_milestones/:id/edit(.:format)                                                   payment_milestones#edit
                payment_milestone GET    /payment_milestones/:id(.:format)                                                        payment_milestones#show
                                  PATCH  /payment_milestones/:id(.:format)                                                        payment_milestones#update
                                  PUT    /payment_milestones/:id(.:format)                                                        payment_milestones#update
                                  DELETE /payment_milestones/:id(.:format)                                                        payment_milestones#destroy

И затем вы можете изменить свое представление на:

<% @financials.each do |financial| %>
  <tr>
    <td><%= financial.responsibility %></td>
    <td><%= link_to "New milestone", new_financial_payment_milestone_path(financial) %></td>
  </tr>
<% end %>

Вы хотите использовать локальную переменную financial, которая передается в блок, а не переменную экземпляра @financial. Вы также должны всегда предоставлять текст ссылки для доступности.

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

добавить это к кнопке path-

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