Rails 5.1,group_by,解析日期,i18n

时间:2018-02-17 09:48:33

标签: ruby-on-rails date group-by internationalization ruby-on-rails-5

我有一个非常具体的问题来获取I18n中的月份名称。我每个月和每年都会对一些信息进行分组,看起来当我想要翻译它时,整个月都有一个像é或û这样的特定字符不起作用,剩下的就是。让我告诉你它的样子:

帮助者:

def user_spendings_paginate
    user.spendings.all.order('date DESC').paginate(:page => params[:page], :per_page => 15)
end

def grouped_spendings
    user_spendings_paginate.group_by{ |t| t.date.to_date == DateTime.now.to_date } 
end

def month_wise_sorted_spendings
    if user_spendings_paginate.present?
       user_spendings_paginate.group_by{ |t| t("date.month_names")[t.date.month] + " " + t.date.year.to_s }
    end     
end

所以你可以看到,我调用了所有的user.spendings。我将它们分组两次,第一次获得当天的日期,另一次获得剩余的每月和每年。你可以看到我的月份名称。在我的yml文件中,我有:

month_names:
-
- Janvier
- Février
- Mars
- Avril
- Mai
- Juin
- Juillet
- Aout
- Septembre
- Octobre
- Novembre
- Decembre

我试图将Décembre中的é和Août中的û移除尝试,但问题仍然存在。

我的控制器:

if params[:month]
    @date = Date.parse("#{params[:month]}")
else
    flash[:error] = t(".something_wrong")
    redirect_to myspendings_path(locale: I18n.locale)
end

我的观点:

<% date_in_link = " #{month}" %>
      <p><%= link_to myspendingsdetail_path(:month => month, locale: I18n.locale), class: "btn btn-secondary" do %>
      <i class="fa fa-link"></i>
      <%= date_in_link %>
      <% end %>

所以基本上我正在做的是我将每月和每年的支出分组。然后我循环遍历所有的user.spendings,我在上面添加了上面这部分代码,所以你有一个链接,根据你可以点击的日期,并发送到一个新的页面,在一年中的这个月有更多的信息。
它有效,但仅适用于没有特定字符的月份。如果我尝试使用Février,我会在控制器中将@date作为消息:invalid date 我认为它来自特殊的特征,因为其余的都在工作。

我希望解释清楚,我尽力了。如果您需要更多东西,请告诉我。

我认为@date变量缺少某些东西,但我不确定。有人帮忙吗?

编辑:

我的网址在工作时看起来像这样:

http://localhost:3000/fr/myspendingsdetail?month=Janvier+2018

当它不起作用时:

http://localhost:3000/fr/myspendingsdetail?month=Decembre+2018

有趣但是当我把这个月放在这样的时候:

http://localhost:3000/fr/myspendingsdetail?month=12+2018

它有效,所以它真的是一个问题

编辑2:

嗯它的确有效...如果我把他带到12月,我就带2,但是如果我把1和1之前的错误一样,那么无效的日期。

1 个答案:

答案 0 :(得分:0)

是的!我懂了!

如果有人需要,我会分享我的答案。

我改变了帮手:

user_spendings_paginate.group_by{ |t| (Date::MONTHNAMES[t.date.month] + " " + t.date.year.to_s) }

如果可以的话,我会在背景中保留当月的英文名称。

然后是观点:

<% date_in_link = " #{month}" %>
      <p><%= link_to myspendingsdetail_path(:month => month, locale: I18n.locale), class: "btn btn-secondary" do %>
      <i class="fa fa-link"></i>
      <%= l date_in_link.to_date, format: :pdf %>
      <% end %>

当我从帮助者那里得到一个String时,我通过我的链接传递了params,我认为我应该改变语言。所以我写了这个: l date_in_link.to_date, format: :pdf在我的yml文件中,我选择了自定义格式:pdf: "%B %Y"一个月和一年。

结果:

(链接)Février20188 - 消费 - 消费 (链接)Janvier 2018
- 消费 - 消费

当我点击链接时,它会通过英语的params,但是谁在乎。在下一页,我用我想要的语言得到了日期。任务完成!