0

Rails 3.1.12 ビューでは、2 番目のレコードからイテレートしたいと考えています。コードは次のとおりです。

<%= f.fields_for :task_templates, @project_task_template.task_templates.offset(1).each do |builder| %> 
    <p><%= render('task_templates', :f => builder) %></p> 
<% end if @project_task_template.task_templates.size > 1 %> 

最初のレコードがまだビューに表示されており、offset(1) が最初のレコードをスキップしていないことがわかります。Railsで2番目のレコードから(レコードの順序をチェックせずに)反復する正しい方法は何ですか?

4

1 に答える 1

4

その理由は、オブジェクト@project_task_template.task_templatesが Query オブジェクトではなく配列であるためです。offset配列をチェーンすることはできません。

ビューでこれを解決することは可能ですが、そのようなロジックをモデル スコープに入れることをお勧めします

class ProjectTaskTemplates < ActiveRecords::Base
  default_scope offset(1)
  # or any other scope if you don't want to put it as default
end

または、ビューではなくコントローラーに入れます。コントローラーから直接インスタンスを使用するには、ビューが馬鹿げている必要があります。

class ProjectTaskTemplates < ActiveRecords::Base
  scope :offset_by_1, offset(1) 
end

# Controller
@project_task_templates = Product.other_queries.offset_by_1
于 2013-06-10T11:01:03.663 に答える