我有两个模特,角色和技能。我正在寻找一种方法,通过视图中的skill.name自动排序所有技能。
以下是我认为的一些代码:
<h2><%= @character.name %>'s Skills</h2>
<% @character.skills.reject {|skill| skill.new_record? }.each do |skill| %>
<b><%= skill.name %></b><br /><br />
...
<%= skill.ranks %><br />
<%= link_to 'Edit', edit_character_skill_path(@character, skill) %>
<br /><br />
<% end %>
这是我控制器的代码:
def index
@character = Character.find(params[:character_id])
@skill = @character.skills.build
@skills = @character.skills.find(:all, :order => 'name')
end
我不确定最后一点是否会真正起作用,如果它能够正常工作,我不确定如何在视图中调用它。有什么输入?此外,这将按字母顺序排列新的技能实例,对吧?在,我有技能A和技能D,然后添加技能B,它会显示为A,B,D?谢谢!
答案 0 :(得分:0)
您可以掌握一系列技能,然后执行.sort
所以,如果你有一个角色,@character.skills
是:
@character.skills
=> ["Archery", "Magic", "Sneak", "Combat", "Healing", "Repair", "Fishing"]
你可以这样做:
@sorted_skills = @character.skills.sort
=> ["Archery", "Combat", "Fishing", "Healing", "Magic", "Repair", "Sneak"]
这样做会将sorted_skills
设置为自然排序的技能数组,但不会改变@character.skills
的原始顺序。但是,如果您改为调用@character.skills.sort!
(请注意!
),它将排序并永久更改@ character.skills中数组的顺序(至少在该变量超出范围之前)。 .sort!
不会以任何方式改变数据库中的模型或数据。
你也可以.sort
任何数组,比如整数,Ruby会以智能的方式对它们进行排序。除此之外还有更多,但听起来这应该可以满足您的需求。