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をルートとして定義している場合、そのイベント表示ページに移動するには、次のように記述できます。

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 に答える