将if if流从Django转换为Ruby on Rails

时间:2017-07-29 20:09:39

标签: python ruby-on-rails ruby django if-statement

我需要将这个Django If Else流程转换为Ruby on Rails:

这是Django代码:

<select name="level" id="level">

  {% if level == 'gold' %}
    <option value="gold" selected>Gold</option>
  {% else %}
    <option value="gold" >Gold</option>
  {% endif %}

  {% if level == 'silver'%}
    <option value="silver" selected="">Silver</option>
  {% else %}
    <option value="silver" >Silver</option>
  {% endif %}

  % if level == 'bronze' %}
    <option value="bronze" selected="">Bronze</option>
  {% else %}
    <option value="bronze" >Bronze</option>
  {% endif %}

</select>

这是我做过的RoR版本:

<select name="level" id="level">

  <% if @package_signup.level == 'gold' %>
    <option value="gold" selected>Gold</option>
  <% else %>
    <option value="gold" >Gold</option>
  <% end %>

  <% if @package_signup.level == 'silver' %>
    <option value="silver" selected="">Silver</option>
  <% else %>
    <option value="silver" >Silver</option>
  <% end %>

  <% if @package_signup.level == 'bronze' %>
    <option value="bronze" selected="">Bronze</option>
  <% else %>
    <option value="bronze" >Bronze</option>
  <% end %>

</select>

这是控制器(我正在尝试访问级别变量):

class Welcome2Controller < ApplicationController
  def pricing
    @package_signup = params[:level] 
  end
end

这是我收到的错误:

  

未定义的方法`level'代表“bronze”:String

2 个答案:

答案 0 :(得分:1)

错误是因为@package_signup是一个等于params[:level]的字符串值。错误消息undefined method 'level' for "bronze":String表明其值为bronze

您可能正在考虑将其作为模型对象。

而不是@package_signup.level== 'gold',您应该使用@package_signup == 'gold'

因此,您在视图中的代码应如下所示:

<% if @package_signup == 'gold' %>

答案 1 :(得分:1)

如果您使用的是RoR,我建议您查看collection_selecthttps://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select)。这将为您节省大量的样板代码。您只需创建一个数组[ 'gold', 'silver', 'bronze' ]并将所选值传递给collection_select函数即可。它会自动将正确的选项标记为已选择。