Rails form_for action的语言环境已损坏

时间:2013-03-14 14:18:51

标签: ruby-on-rails-3 ruby-on-rails-3.2

我有一个帐户信息中心,列出办公室和每个办公室可用的工作。

层次:

  • 公司(1个用户有1个公司,我从用户个人资料中访问)
  • 办公室(每家公司可以有多个办事处)
  • 工作(每个办公室可以有多个工作)

型号:

class Company < ActiveRecord::Base
  has_many :offices, :dependent => :destroy
  has_many :jobs, :through => :offices

class Office < ActiveRecord::Base
  belongs_to :company
  has_many :jobs, :dependent => :destroy

class Job < ActiveRecord::Base
  belongs_to :office

对于每项工作,我都有一个编辑链接

E.g。作业ID 10(作业是办公室工作迭代的局部变量)

= link_to edit_job_path(I18n.locale,job)

- &GT;本地主机:3000 / DE /作业/ 10 /编辑

当我点击编辑链接时,我会转到编辑页面。到目前为止一切都那么好,但表格看起来像那样:

<form accept-charset="UTF-8" action="/10/jobs/10" class="edit_job" enctype="multipart/form-data" id="edit_job_10" method="post">

请注意,我的语言环境(在此示例中为de)已消失并且具有作业ID!

我的routes.rb

scope "/:locale" do
    resources :companies
    resources :offices do
            resources :jobs
    end
    resources :jobs
end

提到了两个工作,我可能没有,但是我可以直接提到工作网址来查看或在创建新工作链接中添加office变量,并使用:office_id(在我的仪表板控制器中: link_to new_office_job_path(I18n.locale,office)然后在我的表格中为新工作:= f.hidden_​​field:office_id)

但即使我删除了资源:办公室中的工作。区域设置仍然被编辑表单中的作业ID替换。

请注意,我可以正确编辑作业,但由于区域设置已更改,因此重定向后本地化文本全部错误。

知道如何解决这个问题吗?

------要求提供额外数据-----------

= form_for(@job) do |f|
    .field
        = f.label :name, t(:job_title)
        = f.text_field :name
    .field
        = f.label :url, t(:job_url)
        = f.text_field :url
    .field
        = f.hidden_field :office_id
    .field
        = f.label :pdf, t(:job_upload_pdf)
        = f.file_field :pdf
    .field
        = f.label :tag_list, t(:job_tags)
        = f.text_field :tag_list
    .actions
        = f.submit "Submit", :class => "btn btn-primary"

------附加信息-----------

BTW:这项工作有效,我得到/ de / jobs / 10但是我想了解为什么如果我使用默认的form_for,语言环境会被破坏。

  = form_for @job, :url => job_path(I18n.locale, @job) do |f|

2 个答案:

答案 0 :(得分:0)

你可以使用Routing Filter来处理语言环境,我在我的项目中尝试过,你不必担心路线中的语言环境,过滤器会为你处理它。

# in config/routes.rb
Rails.application.routes.draw do
  filter :locale
end

我希望这能解决你的问题。

答案 1 :(得分:0)

form_for行构建路径,在构建路径时还需要指定区域设置。要干净地执行此操作(不明确指定url,这也是可能的),请按如下所示编写:

= form_for [I18n.locale, @job] do |f|

这应该呈现正确的路径。 正如documentation中所指定的那样,它将使用数组来构建正确的路径(这适用于命名空间和嵌套路由,因此我猜它也适用于您的语言环境)。

另一种方法是使用:url选项明确指定路径。

HTH。