【问题标题】:Conditional display in View视图中的条件显示
【发布时间】:2015-12-14 17:10:57
【问题描述】:

在我的 index.html.erb 上,我想根据记录的值显示两个内容之一。

我的拆分有一个名为“默认”的列,如果该列的内容 = 1,那么我想显示一个挂锁图标,指示用户无法更改该项目。如果该值是其他值,我想显示一个复选框。

在我的拆分控制器中,我创建了“@default”:

def index
    @splits = Split.all
    @chosen_splits = Issue.find(1).splits.order('updated_at desc')
    @split = Split.first
    @default = Split.find_by default: "1"
    # @balance = @split.balance
end

在我看来,我有以下代码:

<% @chosen_splits.each do |split| %>

<tr>
  <td> <!-- trying to have conditional presentation -->
    <% if @default == '1' %>
    <i class="fa fa-2x fa-lock"></i>
    <% else %>
    <input type="checkbox" value>
    <% end %>
  </td> <!-- end of trying to have conditional presentation -->
  <td><%= link_to split.name, split_path(split) %></td>
  <td class="text-right"><%= number_with_delimiter(split.quantity) %></td>
  <td><%= link_to 'Edit', edit_split_path(split), :class => 'btn btn-xs btn-default' %></td>
  <td><%= link_to 'Delete', split, method: :delete, data: { confirm: 'Are you sure?'}, :class => 'btn btn-xs btn-danger' %></td>
</tr>
<% end %>

从我看到的here 来看,这应该可以工作。但是,事实并非如此。

我的日志文件正在显示:

Processing by SplitsController#index as HTML
  [1m[35mIssue Load (0.4ms)[0m  SELECT  "issues".* FROM "issues" WHERE "issues"."id" = $1 LIMIT 1  [["id", 1]]
  [1m[36mSplit Load (0.3ms)[0m  [1mSELECT  "splits".* FROM "splits"  ORDER BY "splits"."id" ASC LIMIT 1[0m
  [1m[35mSplit Load (0.2ms)[0m  SELECT  "splits".* FROM "splits" WHERE "splits"."default" = $1 LIMIT 1  [["default", 1]]
  [1m[36mCACHE (0.0ms)[0m  [1mSELECT  "issues".* FROM "issues" WHERE "issues"."id" = $1 LIMIT 1[0m  [["id", 1]]
  [1m[35m (0.3ms)[0m  SELECT SUM("splits"."quantity") FROM "splits"
  [1m[36mCACHE (0.0ms)[0m  [1mSELECT SUM("splits"."quantity") FROM "splits"[0m
  [1m[35mSplit Load (0.2ms)[0m  SELECT "splits".* FROM "splits"
  [1m[36mSplit Load (0.3ms)[0m  [1mSELECT "splits".* FROM "splits" WHERE "splits"."issue_id" = $1  ORDER BY updated_at desc[0m  [["issue_id", 1]]
  Rendered splits/index.html.erb within layouts/application (7.5ms)
Completed 200 OK in 625ms (Views: 620.9ms | ActiveRecord: 1.6ms)

非常感谢所有帮助。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    @default 不包含带有“1”的字符串,它包含一个Split 对象,即default 列包含“1”的对象。

    或者,如果找不到该对象,则它包含nil

    也许你想做的事情最好用...来完成

    <% @chosen_splits.each do |split| %>
        <tr>
          <td> <!-- trying to have conditional presentation -->
            <% if split.default == '1' %>
              <i class="fa fa-2x fa-lock"></i>
            <% else %>
              <input type="checkbox" value>
            <% end %>
    

    【讨论】:

    • 好的,有道理。但是,我仍然没有让挂锁显示。复选框仍然显示所有内容。甚至清除了我的缓存并重新启动了服务器。
    • 您确定@chosen_splits 中的一个或多个Split 对象实际上在默认列中有一个“1”吗?更改此项以显示默认值...&lt;td&gt;&lt;%= link_to split.name + " default:#{split.default} ", split_path(split) %&gt;&lt;/td&gt;
    • 是的,其中有 3 个。当我将该代码放在 3 中时,我希望挂锁能够正确显示,在拆分名称旁边显示“default:1”。
    • 好吧,那么我的下一个猜测是 split.default 实际上是 1 而不是 "1"... 这可能是一个固定数字,而不是一个字符串。试试&lt;% if split.default == 1 %&gt;
    • 就是这样!它是一个整数。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多