2017-04-05 1 views
0

コントローラのアクションが呼び出されたときに要素のバックグラウンドイメージを更新しようとしていて、それを把握できませんでした。私の見解では、私は次のタグ、それは私のAnimalsController.rbに以下のメソッドを呼び出しクリックだ投稿アクションでビューの背景を更新するRails

<%= link_to '', color_animal_path(@article), method: :post, :id => "animal-image", remote: true %> 

を持って

def color 
    respond_to do |format| 
     format.js {} 
    end 
    puts 'color called' 
    end 

私はアプリで、以下の内容でcolor.jsと呼ばれるJSファイルを持っています/資産/ JavaScriptの

$('#animal-image').css('background-image', 'url("green.jpg")'); 

と要素のCSSは、この

のように見えます3210

ビューは赤いイメージで正しくレンダリングされますが、イメージをクリックするとコントローラが呼び出されますが(私はputs出力を見ることができます)、要素の背景イメージは更新されません...誰かが助けてくれることを望んでいます私は正しい道を歩いていますが、何か不足していますか?

おかげ

+0

クリックで背景に何か起こっていますか?私は画像へのパスが微調整する必要があるかどうか疑問に思っていますか? –

+0

背景の変更は全くありませんが、元の画像を表示しています...ありがとう – eclipse1203

答えて

1

は全くUJSコールのための特別な理由はありますか?なぜクライアントサイドのjQueryでこれをやってみませんか?

理由がある場合でも(サーバーによって色を動的に設定する必要がある、またはイベントを追跡する必要があるなど)、クライアント側で個別にテストすることをお勧めします。 Rails UJSコンポーネントを再統合します。

例えば、緑色の画像のための新しいCSSクラスを追加して起動します。

#animal-image.updated { 
    background-image: url('green.png'); 
} 

その後、いくつかのJSを追加します。

$("#animal-image").click(function() { 
    $(this).toggleClass('updated'); 
}); 

そのすべての作品ならば、あなたが戻ってそれをすべてを置くことができますcolor.jsに入力し、ブラウザの開発ツールで応答が正しく戻ってきていることを確認して評価されていることを確認してください。

+0

これは素晴らしいアイデアであり、完璧に機能しました。助けてくれてありがとう。 – eclipse1203

+0

すぐに質問があります。上記のリンクを部分の内側にレンダリングするので、複数のレンダリングが表示されます。 jsは最初のものを対象にしています(最初のものを変更し、他のすべてのものは最初の画像を変更します)。正しい部分を変更するにはどうすればいいですか? – eclipse1203

+0

@ eclipse1203:これは、同じidをHTMLで複数回再利用していることを意味しますか?もしそうなら、元の問題を説明するかもしれません。 IDはHTMLドキュメント内で一意である必要があります。したがって、各繰り返しに何かを追加して、一意にしてみてください。最も基本的なレベルでは 'id'という名前に' @ article' idを付けることができます。あるいはそれをクラスにする方が良いかもしれませんか? – gwcodes

関連する問題