我有一个应用程序,其中有一个事件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
如果您有任何其他代码可能需要帮助,请告诉我。我将使用相关代码更新问题。
感谢您的帮助......
答案 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
我希望这会奏效!