ruby-on-rails - Rails - 有两个 parent 的嵌套资源

标签 ruby-on-rails nested-resources

假设我有一个带有两个父模型的子模型:

Event has_many tickets

Person has_many tickets

Ticket belongs_to Event
Ticket belongs_to Person

路由已映射,因此 Ticket 始终嵌套在 Event 或 Person 中:

resource :people do
  resources :tickets
end

resources :events do
  resources :tickets
end

如何通过父资源确定我的 ticket_Controller CRUD 操作的范围?

现在我正在测试参数并使用条件语句:

class TicketController

  before_filter :get_person
  before_filter :get_event

  def index
    if @person do
      ...
    elsif @event do
      ...
    end
    respond_to
      ...
    end
  end

为每个 Action 做这似乎有点乏味。是否有更多的 rails-y DRY 方法来做到这一点?

最佳答案

最干的是使用 inherited_resources:

class TicketsController < InheritedResources::Base
  belongs_to :event, :person, :polymorphic => true
end

砰……完成了。但是,如果您出于某种原因不能使用 inherited_resources,而不是 get_personget_event,您可以像这样为 get_parent 设置过滤器:

class TicketsController < ActionController::Base
  before_filter :get_parent

  def get_parent
    if params[:person_id]
      @parent = Person.find(params[:person_id])
      @template_prefix = 'people/tickets/'
    elsif params[:event_id]
      @parent = Event.find(params[:event_id])
      @template_prefix = 'events/tickets/'
    else
      # handle this case however is appropriate to your application...
    end
  end

  # Then you can set up your index to be more generic
  def index
    @tickets = @parent.tickets
    render :template => @template_prefix + 'index'
  end
end

编辑:我在上面添加了@template_prefix 来解决您在评论中提到的模板问题。

关于ruby-on-rails - Rails - 有两个 parent 的嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3653263/

相关文章:

ruby-on-rails - 如何将 PGSeaerch 结果链接到嵌套资源中的索引页?

ruby-on-rails - 带有 View 测试和嵌套资源的 Rspec 和 Rails

ruby-on-rails - Rails RESTful 删除嵌套资源

ruby-on-rails - 高级 Rails 模式 : organizing views around nested doc, 章节,页面层次结构

ruby-on-rails - 在我的 GSuite 日历上创建事件并使用服务帐户邀请与会者

javascript - 将 html 参数放入 Rails 数组参数中

ruby-on-rails - 通过参数取消sidekiq worker

sql - 如何对名字、姓氏进行 SQL 搜索查询

ruby-on-rails - 每个具有嵌套资源的未定义方法

jquery - Rails form_for 部分渲染验证失败和正确验证