2016-04-30 8 views
1

私はモデルMovieを持っていて、私は2つの映画を比較するためのページを持っています。2つの異なる入力に基づいてリンクのパスを動的に設定するにはどうすればよいですか?

<% 
    @movie1 = Movie.find_by(title: params[:A]) 
    @movie2 = Movie.find_by(title: params[:B]) 
%> 

ページの左側が「A」の映画と右側が「B」の映画を示して示しています。私は2本の映画を設定するのparams ABを使用しています。

現在の2つの映画を削除して新しい映画を入力するオプションがあります。私が持っているシステムはこれです:ページの "A"と "B"の両面には、ユーザーが入力するクリック可能な候補を持つドロップダウンメニューがあり、A面のリンクをクリックすると同じページを除いてparams[:A]が置き換えられ、逆も同様です。このリンクを使用する側の下に「ハリー・ポッター」をクリックたとえば

、:<%= link_to "Harry Potter", compare_path(A: "Harry Potter", B: params[:B]) %>

しかし、この方法では、ユーザーがページは、各映画を選択した後にロードされるのを待たなければなりません。ユーザーが両方のムービーを入力できるようにしてから、ボタンを押して新しいパラメータでページをリロードします。

"Run Comparison"リンクボタンが必要なので、提案をクリックすると、おそらくjQueryを使ってそのリンクのパスをリセットする必要があります。そのトリックは、「A」の提案は最新の「B」の提案を考慮する必要があり、その逆もあります。

たとえば、両方の選択項目が空で、A面で「Harry Potter」を選択すると、リンクのパスはcompare_path(a: "Harry Potter", b: "")になりますが、B面で「The Ring」を選択すると、パスはcompare_path(a: "Harry Potter", b: "The Ring")である必要があります。そして、もし私の心が変わり、A側で "魔力のついた"を選択すると、パスはcompare_path(a: "Bewitched", b: "The Ring")に再設定されます。

私は完全に失われています。誰でもこれを達成する方法を知っていますか?

答えて

0

は(あなたがMoviesControllerを持っていると仮定すると)movie_amovie_bをパラメータ化するには、以下のルートを使用します。params[:movie_a]params[:movie_b]は、それぞれの:movie_aにマップし、URLの:movie_bスラグだろうと

get "compare/:movie_a/:movie_b" => "movies#compare", as: :compare 

注意を。

+0

したがって、AとBのドロップダウンリストを使用して適切なパスを動的に設定するにはどうすればよいですか? –

+0

'compare_path(movie_a:" movie_a_name "、movie_b:" movie_b_name ")'を使用します。 javascriptを使用している場合は、 "/ compare/movie_a_name/movie_b_name"を使用します。 –

+0

しかし、A面を使用してパスを更新すると、Bパラメータを同じにする方法はありますか? –

関連する問題