ruby-on-rails - 帮助解决这个 Ruby 循环

标签 ruby-on-rails ruby-on-rails-3 loops

我已经盯着这个看了好一天了,我不明白我做错了什么。 我希望生成带有复选框的事件列表,但如果其中一项事件位于 users_activity 表中,则将选中该事件复选框。然而,下面的代码显示该事件三次并检查所有框。

<fieldset>
    <table>
        <tr>
            <th>Activity ID</th>
            <th>Activity Name</th>
        </tr>
        <% @Activitys.each do |activity| %>
            <% @users_activity.each do |ua| %>
                <% if activity.id == ua.activity_id %>
                <tr>
                    <td><%= activity.id %></td>
                    <td><%= activity.activity_name%></td>
                    <td><input name="check_<%= activity.id %>" type="checkbox" checked="yes"></td>
                </tr>
                <% else %>
                <tr>
                    <td><%= activity.id %></td>
                    <td><%= activity.activity_name%></td>
                    <td><input name="check_<%= activity.id %>" type="checkbox" checked="no"></td>
                </tr>
                <% end %>
            <% end %>
        <% end %>
    </table>
</fieldset>

这可能真的很简单,但你知道当你盯着一段代码太久会发生什么......

最佳答案

选中所有复选框的原因是 checked 的存在HTML 复选框上的属性会导致选中该复选框,而不管该属性的值如何。即<input type="checkbox" checked="no">结果是选中的复选框。对于不应选中的复选框,您需要编写代码,使它们没有 checked根本没有属性。

您看到的复选框比预期多的原因是因为您有 @users_activity.each循环嵌套在 @Activitys.each 内循环并在 if 中和 else如果你总是输出一个复选框,那么这会导致 @Activitys.length * @users_activity.length复选框。

一种解决方案是在循环之外收集所有用户事件的事件 ID,即

<% user_activity_ids = @users_activity.collect { |ua| ua.activity_id } %>

(您也可以将其移至 Controller )

然后就只有 @Activitys.each循环中生成带有类似内容的复选框

<input name="check_<%= activity.id %>" type="checkbox"
    <%=' checked="yes"' if user_activity_ids.include? activity.id %>>

此外,@Activitys可能应该被称为 @activities因为变量名以大写字母开头表示它是 Ruby 中的常量。

关于ruby-on-rails - 帮助解决这个 Ruby 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428119/

相关文章:

c++ - 如何在不使用堆栈或数组的情况下从 int 中提取每个数字? (C++)

r - 在 R 中逐行构建复杂数据帧的有效方法

ruby-on-rails - 使用 ruby​​zip 下载并提取远程 zip 文件

ruby-on-rails - Rails 3 中具有多个父资源的嵌套资源

ruby-on-rails - 运行 Rails 服务器时找不到 gem 'rails (= 4.2.5) x86-mingw32'

loops - 用萨斯骑行浏览颜色列表

ruby-on-rails - rails 4 : how to access the content of Devise Registrations Controller

ruby-on-rails - 如何禁用特定 Controller 的 ActiveModel::Serializers?

ruby-on-rails - 升级到 OSX 10.7 Lion 后修复 Postgresql

ruby-on-rails - link_to_if 如果为 false 为什么会显示链接标题?