我正在开发一个Rails 4项目,我有一些工作,但我担心这可能是一个坏主意。
我有一个组织课程。组织has_many事件(所有事件属于组织。没有缺少父母。)。
我希望事件#index action仅显示指定组织的事件,和我希望能够从该组织的索引视图创建新事件。
所以,我现在正在做的是在事件控制器中设置@organization,然后执行:index action。
以下是代码如何滚动:
../routes.rb
Rails.application.routes.draw do
resources :organizations do
resources :events
end
end
../events_controller.rb
class EventsController < ApplicationController
before_action :set_event, only: [:show, :edit, :update, :destroy]
before_action :set_organization, only: [:index]
....all the things....
private
def set_organization
@organization = Organization.find(params[:organization_id])
end
end
../views/events/index.html.erb
<p id="notice"><%= notice %></p>
<h1>Listing Events</h1>
<table>
<thead>
<tr>
<th>Start date</th>
<th>End date</th>
<th>Location</th>
<th>Organization</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @events.each do |event| %>
<tr>
<td><%= event.start_date %></td>
<td><%= event.end_date %></td>
<td><%= event.location %></td>
<td><%= event.organization_id %></td>
<td><%= link_to 'Show', event %></td>
<td><%= link_to 'Edit', edit_event_path(event) %></td>
<td><%= link_to 'Destroy', event, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Event', new_organization_event_path(@organization) %>
视图的最后一行,&#34; New Event&#34;链接,如果我没有预设@organization,则不起作用,尽管URL中确实包含组织ID(例如,http://localhost:3000/organizations/2/events/)。
我很欣赏以下类型的反馈:1)不,这太糟糕了,这样做,这就是为什么,或者2)完全没问题,那是怎么回事我会这样做的!
答案 0 :(得分:1)
我应该在控制器中设置父级
是的,你的方法完全没问题。始终在控制器中设置 父实例(FK) ,不将其设置为form
{{1} }。