如何从子类重定向到父类#show view?

时间:2012-12-03 22:32:19

标签: ruby-on-rails associations

我有一个应用程序,其中有一个事件has_many视频,属于一个事件。如何点击视频实例并将其重定向到事件#show视图,使用它的event_id外键来识别正确的事件?这种关联肯定有效,但是我很难通过逻辑来思考,甚至​​在重定向应该发生的地方,即在路线,控制器或视图中?

以下是一些可能相关的代码:

从视图

 <% @video.each do |v| %>
   <li><%= link_to image_tag(v.video_thumb('150'), width: 150), v %></li>
<% end %>


class VideosController < ApplicationController

  def show
    @video = Video.find(params[:id])
    if current_event
      @videos = current_event.videos
      @random_video = current_event.videos.random
    else
      @videos = Video.all
      @random_video = Video.random
    end
  end


class EventsController < ApplicationController
def show
    @event = Event.find_by_name(request.subdomain)
    if request.params[:id].present?
      @event = Event.find(params[:id])
    end

    if not @event.nil? and @event.videos.any?
      @video = Video.random(@event)
      @comment = @video.comments.new
      @comments = @video.comments
    end
  end

  resources :events do
    match '', to: 'events#show', constraints: lambda { |r| r.subdomain.present? && r.subdomain != 'www' }
  end
resources :videos

如果您有任何其他代码可能需要帮助,请告诉我。我将使用相关代码更新问题。

感谢您的帮助......

1 个答案:

答案 0 :(得分:2)

您可以使用event_path(@ event.video)

让我告诉您,当视频属于某个事件时,您可以轻松找到与该视频相关的关联事件。例如:

@video = Video.find(params[:id])
@event = @video.event

简单地生成链接:link_to @ event.name,event_path(@event)

//如果该事件有任何子域,并且子域定义了 EventsController#以root身份显示然后转到我们可以写的事件显示页面:

link_to "#{@video.event.name}", root_url(:subdomain => 
@video.event.name)

或相同:

link_to "#{@event.name}", root_url(:subdomain => @event.name

我希望这会奏效!