where()

可以对Subject.where(id: [12, 23, 11, 22, 44])可以对一个数组进行查找, 得到数组中id号的多个subject

实际应用:

_subject.html.erb中:

########!!!!重要!!!!非常重要=》<input type="checkbox" class="hidden" name="room[subject_ids][]" value="<%= subject.id %>" <%= 'checked' if subject.include_room?(room) %>/> 其中value=的值即为选中checkout时params传递的值, 所以此html中要value="<%= subject.id %>", 当选中checkout时传递该subject的id, 以方便保存



<div class="ui modal" id="placeholder-modal">
  <div class="header">Choose room's subject</div>
    <div class="content">
      <div class="ui form">
        <%= form_tag  "/manage/rooms/update_subject/#{@room.id}", remote: true, class: "ui form" do %>
          <% @subjects.each_slice(3) do |items| %>
            <div class="fields three">
              <% items.each do |subject| %>
                <div class="field">
                  <div class="ui checkbox">
                    <input type="checkbox" class="hidden" name="room[subject_ids][]" value="<%= subject.id %>" <%= 'checked' if subject.include_room?(room) %>/>
                    <label><%= subject.title %></label>
                  </div>
                </div>
              <% end %>
            </div>
          <% end %>


          <div class="field">
            <%= submit_tag "approve", class: "ui button" %>
          </div>
        <% end %>
      </div>
    </div>
  </div>
</div>


#######  Parameters: {"utf8"=>"✓", "room"=>{"subject_ids"=>["44", "45", "48", "55", "56"]}, "commit"=>"approve", "id"=>"163"}


rooms_controller.rb中:

  def update_subject
    @room = Room.find(params[:id])
    subjects = Subject.where(id: params[:room][:subject_ids])
    @room.subjects = subjects
  end

#####chontroller中的update用的是等号=   即@room.subjects = subjects(不用额外定义=号方法, 因为不需要一定的逻辑来限制赋值)

### SQL WHERE语句概述 `WHERE` 是 SQL 中的一个重要子句,用于筛选数据表中的记录。通过 `WHERE` 子句,可以从数据库中提取满足特定条件的数据。以下是关于 `WHERE` 的基本语法以及一些常见用法。 #### 基本语法 ```sql SELECT column1, column2, ... FROM table_name WHERE condition; ``` 其中,`condition` 可以是一个简单的比较操作或者由多个逻辑表达式组成的复杂条件[^1]。 --- ### 条件类型及其示例 #### 1. 使用等于 (`=`) 进行匹配 当需要查找某个字段值完全相等的记录时,可以使用 `=` 操作符。 ```sql -- 查找部门名为'财务部'的所有记录 SELECT * FROM dept WHERE name = '财务部'; ``` 此查询会返回所有名称为 `'财务部'` 的部门信息。 #### 2. 多个条件组合(AND/OR) 可以通过 `AND` 和 `OR` 将多个条件结合起来,实现更加精确的选择。 ```sql -- 找到工资大于30000且小于50000的员工 SELECT * FROM employees WHERE salary > 30000 AND salary < 50000; -- 或者找到属于'财务部'或'市场部'的员工 SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2; ``` 上述例子分别演示了如何利用 `AND` 和 `OR` 构建复合条件[^3]。 #### 3. 利用子查询作为条件 有时可以直接将另一个查询的结果嵌入到当前查询之中,这种技术称为 **子查询**。 ```sql -- 获取隶属于'财务部'和'市场部'的所有员工详情 SELECT * FROM emp WHERE dept_id IN ( SELECT id FROM dept WHERE name = '财务部' OR name = '市场部' ); ``` 这里外部查询依赖内部查询产生的结果集来进行进一步过滤[^2]。 #### 4. 高级条件处理——CASE 表达式 对于较为复杂的业务需求,比如分类统计,则可借助 `CASE` 结构完成动态计算。 ```sql -- 对雇员薪资水平进行分级评定 SELECT employee_id, salary, CASE WHEN salary > 50000 THEN 'High Salary' WHEN salary BETWEEN 30000 AND 50000 THEN 'Medium Salary' ELSE 'Low Salary' END AS Salary_Level FROM employees; ``` 这段脚本定义了一个新的虚拟列 `Salary_Level` ,它依据实际收入情况自动分配标签[^4]。 --- ### 总结 以上介绍了几种常见的 `WHERE` 子句应用场景,包括单一条件匹配、多条件联合判定、基于子查询构建高级约束以及采用 `CASE` 实现灵活转换等功能特性。这些技巧能够帮助开发者高效地操控关系型数据库资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值