0

送信されていない場合にテーブル内のすべてのレコードを表示するにはどうすればよいですか?params[:subject_id]または、送信された場合に表示されるレコードをフィルター処理するにはどうすればよいですparams[:subject_id]か?

これまでのところ、ページコントローラーに before フィルターがあり、params[:subject_id]送信されたかどうかを確認してインスタンス変数を作成しました。

  private

  def find_subject
    if params[:subject_id]
      @subject = Subject.find_by_id(params[:subject_id])
    else
      @subject = Subject.all
    end
  end

このように実行すると@pages、最後のレコードのみが保存されますが、ビュー内の何も壊れません。

  before_filter :find_subject

  def list
    @subject.each do |subject|
      @pages = Page.order("pages.position ASC").where(:subject_id => subject.id)
    end
  end

しかし、私がこのようにすると

  def list
      @pages = Page.order("pages.position ASC").where(:subject_id => @subject.id)
  end

Webrickコンソールで出力を確認すると、レコードがまったく返されません。これが表示されます

Subject Load (0.2ms)  SELECT `subjects`.* FROM `subjects` 
Page Load (0.4ms)  SELECT `pages`.* FROM `pages` WHERE `pages`.`subject_id` = 2186859380 ORDER BY pages.position ASC

そのIDを取得する方法がわかりません2186859380

私もこのように疲れました

  def list
    if @subject.object_id.nil?
      @pages = Page.order("pages.position ASC")
    else
      @pages = Page.order("pages.position ASC").where(:subject_id => @subject.object_id)
    end
  end

ただし、これもいくつかのエラーをスローし、私のビューも壊れます。

これが私の見解ですので、完全な画像を得ることができます

<div class="page list">
    <h2>Pages</h2>
<%= link_to "Add a new Page", {:action => "new", :subject_id => @subject.id}, :class => "action new" %>
    <table class="listing" summary="Pages List">
        <tr class="header">
            <th>&nbsp;</th>
            <th>Subject</th>
            <th>Page</th>
            <th>Visible</th>
            <th>Sections</th>
            <th>Permalink</th>
            <th>Actions</th>
        </tr>
        <% @pages.each do |page| %>
        <tr class="<%= cycle("odd", "even") %>">
            <td><%= page.position %></td>
            <td><%= page.subject.name %></td>
            <td><%= page.name %></td>
            <td class="center"><%= page.visible ? "Yes" : "No" %></td>
            <td class="center"><%= page.sections.size %></td>
            <td><%= page.permalink %></td>
            <td class="actions">
                <%= link_to("Sections", {:controller => "sections", :action => "list", :page_id => page.id}, :class => "action delete")%>
                <%= link_to("Show", {:action => "show", :id => page.id, :subject_id => @subject.id}, :class => "action show")%>
                <%= link_to("Edit", {:action => "edit", :id => page.id, :subject_id => @subject.id}, :class => "action edit")%>
                <%= link_to("Delete", {:action => "delete", :id => page.id, :subject_id => @subject.id}, :class => "action delete")%>
            </td>
        </tr>
        <% end %>
    </table>
</div>

私が間違っていることについての助けをいただければ幸いです。

4

1 に答える 1

1

次のように件名に「s」を追加する必要があると思います。

  private

  def find_subject
    if params[:subject_id]
      @subject = Subject.find_by_id(params[:subject_id])
    else
      @subjects = Subject.all
    end
  end

だから今、あなたはこれを行うことができます:

def list
  if subjects
    @subject.each do |subject|
      @pages = Page.order("pages.position ASC").where(:subject_id => subject.id)
    end
  else
    @pages = Page.order("pages.position ASC").where(:subject_id => @subject.id)
  end
end

あなたはあなたの見解で似たようなことをすることができます...

于 2012-08-07T18:44:57.880 に答える