我需要将这个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
错误是因为
@package_signup
是等于params[:level]
的字符串值。错误消息undefined method 'level' for "bronze":String
表明其值为bronze
你在考虑,也许,作为一个模型对象
应该使用
@package_signup == 'gold'
,而不是@package_signup.level== 'gold'
因此,视图中的代码应该如下所示:
如果您使用的是RoR,我建议您查看
collection_select
(https://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select)。这将为您节省大量样板代码。您只需创建一个数组[ 'gold', 'silver', 'bronze' ]
,并将所选值传递给collection_select
函数。它会自动将正确的选项标记为选中相关问题 更多 >
编程相关推荐