我设置了目标 步骤和步骤 任务。在我看来,我正在展示一个目标,如果那个目标有步骤,那么我可以拉出那些并展示它们。我现在很难显示每个步骤的任务。我可以获得与正确步骤相关联的任务,因此部分工作正常,但我无法访问任何数据,名称和描述专门针对该任务。
我只是不确定如何在控制器中创建它。我在the guide试图寻找解决方案并尝试了类似
之类的东西 @goal.steps.tasks
@step.tasks
我无法找到任何点击在控制器中创建变量的内容,因此我可以访问它。
goals_controller.rb show method
def show
@goal = Goal.find(params[:id])
@steps = @goal.steps(page: params[:page])
# @tasks = ?
end
goal.rb
class Goal < ActiveRecord::Base
has_many :steps, dependent: :destroy
has_many :tasks, through: :steps
end
step.rb
class Step < ActiveRecord::Base
belongs_to :goals
has_many :tasks, dependent: :destroy
default_scope -> { order(created_at: :desc) }
end
task.rb
class Task < ActiveRecord::Base
belongs_to :steps
end
视图
目标/展示视图
<p>
<% if @goal.steps.any? %>
<!-- Projects Row -->
<div class="row">
<%= render @steps %>
</div>
<!-- /.row -->
<% else %>
No steps for this goal.
<% end %>
</p>
为步骤
渲染的部分内容<div id="steps-<%= step.id %>" class="col-md-3 portfolio-item not completed" style="background-color:#e26a5c;border-radius:10px;border:1px solid #6cbdc4;margin:0 5px 5px 0;">
<h3>
<p>In order to achieve this goal I need to <strong><%= step.name %></strong> in <strong><%= time_ago_in_words(step.deadline) %></strong></p>
</h3>
<a href="/steps/<%= step.id %>/edit" style="background: none;"><img src="/img/icon-edit.png"></a>
<% if step.tasks.any? %>
<%= render "tasks/task" %>
<% else %>
<%end %>
</div>
<% else %>
<div id="steps-<%= step.id %>" class="col-md-3 portfolio-item completed" style="background-color:#6cbdc4;border-radius:10px;border:1px solid #e26a5c;margin:0 5px 5px 0;">
<h3>
<p>In an effort to achieve this goal I needed to <strong><%= step.name %></strong> in <strong><%= time_ago_in_words(step.deadline) %></strong></p>
</h3>
<a href="/steps/<%= step.id %>/edit" style="background: none;"><img src="/img/icon-edit.png"></a>
</div>
任务/任务是我试图引入的部分内容,我可以在正确的步骤和所有内容上链接到它,但是当我输入 task.name 或时它会显示未定义的方法task.description in。
答案 0 :(得分:1)
在goals_controller.rb
:
def show
@goal = Goal.find(params[:id])
@steps = @goal.steps(page: params[:page]).includes(:tasks)
end
然后在你看来你可以有这样的东西:
<ul>
<% @steps.each do |step| %>
<li>
<%= step %>
<p>Tasks:</p>
<ul>
<% step.tasks.each do |task| %>
<li><%= task %></li>
<% end %>
</ul>
</li>
<% end %>
</ul>
有关includes
的更多信息:http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations