Ruby on Rails:从id显示数据库数据?

时间:2013-04-29 05:46:28

标签: ruby-on-rails ruby ruby-on-rails-3 controller

我有一个关系数据库,其中某些东西属于这个,并且其中有很多...我有一个给定的URL参数的工作示例,但想知道如何将相同的概念应用于页面它遍历 ALL 数据库。

控制器

  def index
    @lists = List.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @lists }
    end
  end

@lists = List.all是获取我数据库中的所有值,以便在视图页面中使用它并迭代它以显示值。

但是,我想迭代它然后也获取id,并根据id迭代我数据库中的另一个表。我在同一个控制器中有另一种方法(不知何故,我不知道)

  def show
    @list = List.find(params[:id])
    @idea = @list.ideas.build
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @list }
    end
  end

@list = List.find(params[:id])获取网址中的参数,然后@idea = @list.ideas.build以某种方式使其与@list相关,我可以使用此循环

<% @list.ideas.each do |idea| %>
  <div>
    <div class="list_idea_desc"><%= idea.description %></div>
  </div>
<% end %>

ideas中获取list表中的值并输出lists内的页面。但是如果我通过这种方式迭代,我无法在索引页面中输出所有 ideas所有 <% @lists.each do |list| %> <% @list.ideas.each do |idea| %> <div> <div class="list_idea_desc"><%= idea.description %></div> </div> <% end %> <% end %> (没有url参数) :

@lists

这有意义吗?我想我只是想弄清楚如何从{{1}}的迭代中获取id,然后以某种方式将id连接到我的数据库中的另一个表?

谢谢!

1 个答案:

答案 0 :(得分:4)

实际上,你可以做到这一点。我相信如果您将<% @list.ideas.each do |idea| %>更改为<% list.ideas.each do |idea| %>,它就会有用。

问题是@list是一个实例变量(可能是一个未设置的变量 - 我没有看到它设置在任何地方),而list是由迭代器设置的局部变量({ {1}})。

请注意,顺便提一下,随着数据库中列表数量的增加,这可能会开始运行得非常慢,因为服务器将进行一次调用以获取与每个列表关联的Ideas。您可以使用eager loading解决此问题。