私はあなたがほとんどそこにいると思います。
最初に - はい、実行時に JavaScript を使用して CSS を変更すると、DOM 要素の外観がすぐに変更されます。
クライアント側では、どの画像が選択されたかをユーザーに示す必要がありますが、送信フォームの各要素の承認済みの値も保存する必要があります。
Rails では、追加のデータを格納する非表示の入力要素を作成するのが一般的です。当面のタスクを考えると、0/1 の値を格納できます - 拒否/承認。画像/選択値に名前を付けるための独自の規則を考え出すことができます。
次に、ビューで、JavaScript 関数を指す onclick リスナーを画像に追加します。
1) クリックされた要素が既に選択されているかどうかを確認する、2) 現在の要素の css を変更する、3) その要素の非表示の入力値を更新する。
これはダミーのデモです - jsfiddle
後で、コントローラーの から承認/拒否された値を取得できparams
ます (以下を参照)。
ビューの構築時にフラグ値に応じて css クラスを割り当てたい場合はapproved
、次のようにすることができます。
<img id="image_<%= image_id %>" src="<%= image_item.path" class="<%= (image_item.approved.to_i == 1) ? 'approved_img' : 'non_appr_img' %>" %>
<input id="image_<%= image_id %>_app_flg" type="hidden" value="<%= image_item.approved %>" />
ここで、image_item はオブジェクトのプロパティpath
とapproved
(自明)、image_id
画像オブジェクトの ID、approved_img
およびnon_appr_img
- css クラスです。
承認済みフラグを保存するためのバックエンドについては議論していません。問題の範囲外のようです
編集
バックエンドに関するブリーフ
画像モデルがある場合は、それを拡張して承認プロパティを含めます (データベースの移行を準備し、モデルの .rb ファイルを編集して新しい列を含めます)。
ビューでは、コントローラーに送信されるフォーム内のすべての非表示の入力を含めます (たとえば、画像の配列をループします)。例えば:
<%= form_for :images, :url => {:action => "approve_images"}, :html => {:name => "testForm"} do |f| %>
<!-- TODO do stuff here - eg display images -->
<% @images.each do |imageItem| %>
<%= f.hidden_field "#{imageItem.id}_appproved", {:value => imageItem.approved}%>
<% end %>
<!-- TODO add a submit button -->
<% end %>
:images
*ここにコントローラーが必要ですapprove_images
。フォームが送信される (ルートに含まれる) コントローラーの関数であり、@images
(モデルからの) 画像データを含む配列であり、レンダリングする前にコントローラーで準備したものです。見る。画像にはIDと承認済みのプロパティがあると思います。
これにより、次のようなビュー dom 要素が生成されます。
<input id="images_IMAGEID_appproved" name="images[IMAGEID_approved]" type="hidden" value="1" />
フォームを送信すると、コントローラーで次のようにこれらの値にアクセスできるようになります。
img_approved = params[:images][IMAGEID+"_approved"]
最後に、その値をデータベースに保存できます。幸運を!:)
さらに多くの基本的なことを省略していますが、質問が広すぎると思います。モデルの作成、読み取り、書き込み、ビュー用のデータの準備などの方法を詳述するリソースがたくさんあります。そうでない場合-お願いしますhttp://guides.rubyonrails.org/getting_started.htmlから始めましょう