从表中检索数据

时间:2011-09-06 22:17:12

标签: ruby-on-rails

我现在已经打破了3个小时的脑袋,我无法理解这一点,我最近开始使用Rails,我爱上了它,但还有一些我不知道的小事。就像我有一个从表中提取所有数据的视图。

<% @albums.each do |album| %>
<div class="album">
<%= album.artist %> - <%= album.album %>
</div>

<div class="albumTask">
  <%= link_to 'Show', album %>
  <% if can? :update, @album %>
    <%= link_to 'Edit', edit_album_path(album) %>
  <% end %>
  <% if can? :destroy, @albumy %>
    <%= link_to 'Destroy', album, confirm: 'Are you sure?', method: :delete %>
  <% end %>
</div>
<% end %>

但我真正希望它做的只是将数据拉到genre = Dubstep。现在在PHP中,我会做类似的事情。

$result = mysql_query("SELECT * FROM albums WHERE genre='dubstep'")

我错过了什么?

3 个答案:

答案 0 :(得分:1)

如果您使用ActiveRecord,只需在查询中添加where子句:

Album.where(:genre => "dubstep")

其他一些信息:http://guides.rubyonrails.org/active_record_querying.html#conditions

答案 1 :(得分:0)

我认为对您来说重要的是了解MVC(模型 - 视图 - 控制器)架构的工作原理。这是一个链接on how it works

您提供的代码是您的视图,它知道如何显示相册列表。但是控制器可以完成MVC中的大部分工作,例如为您的视图提供相册列表。目前,如果要将所有相册编入索引,则会在/app/controllers/AlbumsController.rb

中调用此部分
def index
  @albums = Album.all

  respond_to [...]
  [...]
end

这是您视图中@albums.do each {...}的来源。我会做的是类似的,但不是.all而是传递.where(:genre => :params[:genre])子句,而参数来自你的网址。

答案 2 :(得分:0)

试试这个:

Album.find_all_by_genre("dubstep")