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级别
返回一个数字。这是否意味着我必须重复这个习惯。rbcurrent_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 %>