你能用if / else语句来设置erb中的div吗?

时间:2016-11-13 02:24:57

标签: html css ruby-on-rails ruby erb

很抱歉,如果这是非常严重的问题;这是我在这里的第一篇文章。我在轨道上使用erb for ruby​​,我想知道我是否可以根据用户选择使div的背景颜色不同。我在网上看了找不到答案。我是新手,我还在努力学习如何搜索。

            <div class="row">
    <% @stores.each do |store| %>
        <div class="col s12 m6">

        <% if store.color = 'red' %>
            <% profile_color = 'red' %>
        <% elsif store.color = 'blue' %>
            <% profile_color = 'blue' %>
        <% elsif store.color = 'green' %>
            <% profile_color = 'green' %>
        <% elsif store.color = 'orange' %>
            <% profile_color = 'orange' %>
        <% end %>


            <div class="card <%= profile_color %> center">
                <div class="card-content white-text">
                    <span class="card-title"> <%= store.name %> </span>
                    <h6>Owner: <%= store.owner %> </h6>
                    <h6>Location: <%= store.location %> </h6>
                </div>
                <div class="card-action" >
                    <%= link_to 'Visit Store', store_departments_path(store) %>
                    <%= link_to 'Edit', edit_store_path(store) %>
                    <%= link_to 'Delete', store_path(store), method: :delete,
                         data: {confirm: 'Really Delete?'} %>
                </div>
            </div>
        </div>
    <% end %>
</div>

我使用一个表单向用户询问颜色,并从下拉列表中查看类型字符串。我已经检查过,@ store.color正在存储颜色和所有内容。

3 个答案:

答案 0 :(得分:1)

问题是profile_color是在每个if的范围内定义的,所以当你到达class属性为nil时,因为我看到if除了分配相同的值之外没有做任何事情,你可以改变:

<div class="card <%= profile_color %> center">

使用store.color之类的:

<div class="card <%= store.color %> center">

删除所有if

答案 1 :(得分:1)

是的,您应该能够使用profile_color / if语句设置else变量,然后将其输出到class属性中。

这个特定代码的问题是

if store.color = 'red' 

不会检查store.color是否等于'red'将值<{1}} 分配给'red',然后检查值{{ 1}}是真实的。它是真实的(store.color'red'除外),因此无论false的原始值是什么,nil都应设置为profile_color。< / p>

您想要使用

'red'

代替。虽然正如其他答案中指出的那样,如果store.color始终与if store.color == 'red' 相同,您可以在profile_color属性中使用store.color并跳过{ {1}}。如果您想确保只有某些值可以放入store.color,那么您可以检查class是否添加profile_color,如果它不存在的话。

答案 2 :(得分:0)

我可能会误解,为什么你不做这样的事情

<% @stores.each do |store| %>
    <div class="col s12 m6">
        <div class="card <%= store.color %> center">
            <div class="card-content white-text">
                <span class="card-title"> <%= store.name %> </span>
                <h6>Owner: <%= store.owner %> </h6>
                <h6>Location: <%= store.location %> </h6>
            </div>
            <div class="card-action" >
                <%= link_to 'Visit Store', store_departments_path(store) %>
                <%= link_to 'Edit', edit_store_path(store) %>
                <%= link_to 'Delete', store_path(store), method: :delete,
                     data: {confirm: 'Really Delete?'} %>
            </div>
        </div>
    </div>
<% end %>