【问题标题】:Rails 5.1, group_by, parse date, i18nRails 5.1,group_by,解析日期,i18n
【发布时间】:2018-02-17 09:48:32
【问题描述】:

我有一个非常具体的问题是在 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,我会收到一条消息:invalid date for @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 月,他会带我来,同样适用于 2,但如果我把 1 放在 1 月,则与以前相同的错误,无效日期。

【问题讨论】:

  • 好的,所以最后我不明白问题出在哪里。我尝试了 Décembre,当然在我的 URL 中我有:http://localhost:3000/fr/myspendingsdetail?month=Décembre+2018,因为 é 是不行的,但是如果我将其更改为:http://localhost:3000/fr/myspendingsdetail?month=Decembre+2018 它可以工作,之前它没有......我不明白...

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


【解决方案1】:

是的!我明白了!

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

我改变了我的助手:

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 %>

当我从我的助手中得到一个字符串,并通过我的链接传递那个槽参数时,我认为我应该在那里更改语言。所以我写了这个: l date_in_link.to_date, format: :pdf 在我的 yml 文件中,我选择了一种自定义格式,如下所示:pdf: "%B %Y" 表示月份和年份。

结果:

(link)Février 2018
- 消费
- 消费
(链接)Janvier 2018
- 消费
- 消费

当我点击链接时,它会以英文传递参数,但谁在乎。无论如何,在下一页上,我还是用我想要的语言返回了日期。任务完成!

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多