4

我有一个帐户仪表板,其中列出了办公室以及每个办公室的可用工作。

等级制度:

  • 公司(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

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

例如,对于工作 id 10(工作是办公室工作迭代的局部变量)

= 链接到编辑作业路径(I18n.locale,作业)

-> 本地主机:3000/de/jobs/10/edit

当我点击编辑链接时,我进入编辑页面。到目前为止一切顺利,但表格看起来像这样:

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

请注意,我的语言环境(在本例中为 de)消失了,取而代之的是作业 ID!

我的路线.rb

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

提到了两个工作,我可能可以不用,但这是一种简单的方法,我可以直接提及工作 url 以查看或在创建新工作链接中添加 office 变量并使用 :office_id (在我的仪表板控制器中:link_to new_office_job_path( I18n.locale, office) 然后在我的新工作表格中:= f.hidden_​​field :office_id)

但即使我删除了 :offices 中的资源 :jobs。区域设置仍由编辑表单中的作业 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"

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

顺便说一句:这项工作有效,我得到 /de/jobs/10 但我想了解如果我使用默认 form_for,语言环境为什么会损坏。

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

2 回答 2

0

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

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

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

于 2013-03-20T06:21:38.190 回答
0

form_for行构建路径,构建路径时还需要指定语言环境。要干净利落地执行此操作(无需显式指定 url,这也是可能的),请将其编写如下:

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

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

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

HTH。

于 2013-03-20T11:05:28.637 回答