【发布时间】:2020-10-16 20:08:53
【问题描述】:
所以我为我的 Sinatra 项目创建了一个下拉表单,我希望它预先填充该选项。我能够做到这一点,但它变成了一个大案例陈述!任何想法如何重构这个?谢谢!
get '/animes/:id/edit' do
if is_logged_in?
@anime = Anime.find_by_id(params[:id])
case @anime.rating
when 1
@oneselect = "selected"
when 2
@twoselect = "selected"
when 3
@threeselect = "selected"
when 4
@fourselect = "selected"
when 5
@fiveselect = "selected"
when 6
@sixselect = "selected"
when 7
@sevenselect = "selected"
when 8
@eightselect = "selected"
when 9
@nineselect = "selected"
when 10
@tenselect = "selected"
end
erb :'animes/edit'
else
redirect to '/'
end
end
这是我的 .erb 视图文件表单!
<label for="rating">Rating:</label>
<select name="rating" id="rating" value="<%=@anime.rating%>">
<option value="10"<%=@tenselect%>>10 (Masterpiece)</option>
<option value="9"<%=@nineselect%>>9 (Great)</option>
<option value="8"<%=@eightselect%>>8 (Very Good)</option>
<option value="7"<%=@sevenselect%>>7 (Good)</option>
<option value="6"<%=@sixselect%>>6 (Fine)</option>
<option value="5"<%=@fiveselect%>>5 (Average)</option>
<option value="4"<%=@fourselect%>>4 (Bad)</option>
<option value="3"<%=@threeselect%>>3 (Very Bad)</option>
<option value="2"<%=@twoselect%>>2 (Horrible)</option>
<option value="1"<%=@oneselect%>>1 (Appalling)</option>
</select><br>
【问题讨论】:
-
请注意以下几点:如果
h = { 1=>"one", 2=>"two",..., 10=>"ten" }和@oneselect = 'cat'然后n=1; instance_variable_set("@#{h[n]}select" , 'dog') #=> "dog"那么现在@oneselect #=> "dog"。但是,我非常怀疑,如果你想要所有这些实例变量,而不是一个包含10元素数组的变量。
标签: ruby refactoring case sinatra erb