2

我有一个应用程序,其中一个事件有_许多视频,它属于一个事件。如何单击视频实例并使用其 event_id 外键将其重定向到 events#show 视图以识别正确的事件?该关联肯定有效,但我正在努力思考逻辑,甚至重定向应该发生在哪里,即在路由、控制器或视图中?

这是一些可能相关的代码:

从视图

 <% @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

让我知道您是否可能需要帮助的任何其他代码,我将使用相关代码更新问题。

谢谢你的帮助....

4

1 回答 1

2

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

让我告诉你,当一个视频属于事件时,你可以很容易地从该对象中找到与该视频相关的关联事件。例如:

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

用于链接生成:link_to @event.name, event_path(@event)

// 如果该事件有任何子域,并且如果子域将 EventsController#show 定义为 root,那么要转到该事件显示页面,我们可以编写:

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

或相同:

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

我希望这会奏效!

于 2012-12-03T23:30:16.337 回答