Ruby on rails 如何仅显示父模型内的嵌套属性';什么方法?

Ruby on rails 如何仅显示父模型内的嵌套属性';什么方法?,ruby-on-rails,ruby,model-view-controller,nested,Ruby On Rails,Ruby,Model View Controller,Nested,我喜欢用我的网络应用程序养成良好的习惯 调用可显示您当前的习惯水平 这将列出一个习惯的所有date\u missed,但是我们如何编辑它以仅显示当前级别的date\u missed 习惯/\u习惯 <% habit.levels.each do |level| %> <% level.missed_dates.each do |missed_dates| %> <% if missed_dates.date_missed.present? %

我喜欢用我的网络应用程序养成良好的习惯

调用
可显示您当前的习惯水平

这将列出一个习惯的所有
date\u missed
,但是我们如何编辑它以仅显示
当前级别的
date\u missed

习惯/\u习惯

  <% habit.levels.each do |level| %>
    <% level.missed_dates.each do |missed_dates| %>
      <% if missed_dates.date_missed.present? %>
          <%= missed_dates.date_missed %>
      <% end %>
    <% end %>
  <% end %>
习惯
有很多
级别,而
有很多
未命中

MissedDatesController

  def create
    habit = Habit.find(params[:habit_id])
    habit.missed_days = habit.missed_days + 1
    habit.save!
    level = habit.levels.find(params[:level_id])
    level.missed_days = level.missed_days + 1
    if level.missed_days == 3
      level.missed_days = 0
      level.days_lost += habit.calculate_days_lost + 2
    end
    level.save!
    head :ok # this returns an empty response with a 200 success status code
    @missed_date = level.missed_dates.new(missed_date_params)
    @missed_date.save
  end
更新
不要迭代所有
级别
,只需将
当前\u级别
直接传递到内部块:

<% habit.current_level.missed_dates.each do |missed_dates| %>
  <% if missed_dates.date_missed.present? %>
    <%= missed_dates.date_missed %>
  <% end %>
<% end %>


出于某种原因,我为1:Fixnum使用了
未定义的方法“missed_dates”
我尝试了其他变体,得到了相同的结果。再次感谢你的帮助!似乎您的
current_level
方法返回的是一个数字,而不是
level
对象。顺便说一句,你在问题中的
current_level
方法看起来很奇怪(该方法没有
end
),我认为
end
就在那里。我更新了模型的其余部分,以便您可以看到。如果我在其他地方添加一个端点,那么我会得到一个错误,所以我很确定它在那里。Yea
当前\u级别
返回一个数字。这是否意味着我必须重复这个习惯。rb
current_level
code到天数_missed.rb?嗯,你用其他方法定义方法-这让我很困惑。但是当前的
级别不是和上次的级别相同吗?所有的级别都是从创建开始构建的
current\u level
计算当前习惯的级别。在current\u level方法中,您返回一个整数(case n\u days…),这个整数是什么意思?我的意思是,在水平模型中这个整数是什么?你能通过level.rb吗?level.rb只是
属于:习惯
@SoufyaneBouchaala。整数表示自
date\u开始以来的天数
def current_level
  return 0 unless date_started

  def committed_wdays
    committed.map do |day|
      Date::ABBR_DAYNAMES.index(day.titleize)
    end
  end

  def n_days
    ((date_started.to_date)..Date.yesterday).count do |date|
      committed_wdays.include? date.wday
    end - self.real_missed_days
  end

  case n_days
    when 0..9
      1
    when 10..24
      2
    when 25..44
      3
    when 45..69
      4
    when 70..99
      5
    else
      6
  end
end

def real_missed_days
  value = 0
  levels.each do |level|
    value += level.missed_days + level.days_lost
  end
  value
end

def calculate_days_lost
  def n_days
    ((date_started.to_date)..Date.yesterday).count do |date|
      committed_wdays.include? date.wday
    end - self.real_missed_days
  end

  case n_days
    when 0..9
      n_days
    when 10..24
      n_days-10
    when 25..44
      n_days-25
    when 45..69
      n_days-45
    when 70..99
      n_days-70
    else
      n_days-100
  end
end

def days_left_in_current_level
  def n_days
    ((date_started.to_date)..Date.yesterday).count do |date|
      committed_wdays.include? date.wday
    end - self.real_missed_days
  end

  case n_days
    when 0..9
      10-n_days
    when 10..24
      25-n_days
    when 25..44
      45-n_days
    when 45..69
      70-n_days
    when 70..99
      100-n_days
    else
      0 # No end
  end
end

def progress_in_percent
  calculate_days_lost / (calculate_days_lost + days_left_in_current_level).to_f * 100
end
<% habit.current_level.missed_dates.each do |missed_dates| %>
  <% if missed_dates.date_missed.present? %>
    <%= missed_dates.date_missed %>
  <% end %>
<% end %>