我应该在控制器中设置父级还是一个可怕的想法?

时间:2015-07-26 20:49:08

标签: ruby-on-rails-4

我正在开发一个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)完全没问题,那是怎么回事我会这样做的!

1 个答案:

答案 0 :(得分:1)

  

我应该在控制器中设置父级

是的,你的方法完全没问题。始终在控制器中设置 父实例(FK) 将其设置为form {{1} }。