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

2024-05-20 13:16:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将这个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>

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

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

这是我收到的错误:

undefined method `level' for "bronze":String


Tags: packagesilverifvaluelevelselectelseend
2条回答

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

你在考虑,也许,作为一个模型对象

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

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

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

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

相关问题 更多 >