我想你快到了。
首先 - 是的,在运行时使用 javascript 更改 css 将立即改变 dom 元素的外观。
在客户端 - 您希望向用户指示已选择哪些图像,但您还需要在提交表单中存储每个元素的批准值。
在 Rails 中,通常会创建隐藏的输入元素来存储额外的数据。鉴于手头的任务 - 他们可以存储 0/1 的值 - 拒绝/批准。您可以提出自己的命名图像/选择值的约定。
然后,在您的视图中,将 onclick 侦听器添加到指向 javascript 函数的图像中:
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
图像对象的 idapproved_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
是一个包含图像数据的数组(来自您的模型),并且您在渲染之前在控制器中准备好了看法。我假设图像具有 ids 和批准的属性。
这将在您的视图中产生如下 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开始