我需要将这个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
答案 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_select
(https://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select)。这将为您节省大量的样板代码。您只需创建一个数组[ 'gold', 'silver', 'bronze' ]
并将所选值传递给collection_select
函数即可。它会自动将正确的选项标记为已选择。