Ruby on rails 3 Rails form_for action的区域设置已损坏

Ruby on rails 3 Rails form_for action的区域设置已损坏,ruby-on-rails-3,ruby-on-rails-3.2,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 <

我有一个帐户仪表板,列出了办公室和每个办公室的可用工作

层次结构:

  • 公司(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
提到了两个作业,我可能不需要,但这是一种简单的方法,可以直接提到要查看的作业url,或者在“创建新作业”链接中添加office变量,并使用:office\u id(在我的仪表板控制器中:link\u到新的\u office\u作业路径(I18n.locale,office),然后在我的表单中查看新作业:=f.hidden\u字段:office\u id)

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

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

知道怎么解决吗

------要求提供补充数据-----------

------补充资料-----------

顺便说一句:这种变通方法很有效,我得到了/de/jobs/10,但我想了解,如果我使用默认的形式_,为什么语言环境会被破坏

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

您可以使用,我已经在我的项目中尝试过了,您不必担心路由中的区域设置,过滤器将为您处理它

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

我希望这将解决您的问题。

用于行的
表单\u将构建路径,在构建路径时,您还需要指定区域设置。要干净地执行此操作(不显式指定url,这也是可能的),请按如下方式编写:

= form_for [I18n.locale, @job] do |f|
这应该是正确的路径。 如中所述,它将使用数组来构建正确的路径(这适用于命名空间和嵌套路由,因此我猜它也适用于您的区域设置)

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


HTH.

您的问题很可能是表单本身。你能在你的问题中包含编辑表单的代码吗?该表单与“新工作”表单非常相似,保持了区域设置不变。链接到new:localhost:3000/de/offices/5/jobs/new(使用路由中的其他资源)->form accept charset=“UTF-8”action=“/de/jobs”class=“new\u job”enctype=“multipart/form data”id=“new\u job”method=“post”为(@job)
运行
url\u时出现一个错误,让我无法理解为什么您没有得到任何信息。我可以通过将
as
选项传递到路由中的作用域并使用生成的命名路由来修复它。类似于
locale\u job\u path(params[:locale],@job)
。好吧,这就是我在最后所说的答案。问题是,为什么区域设置路径首先损坏,而其他表单(如new)也可以。您是否尝试过[I18n.locale,@job]
表单的
表单?您确定设置了
I18n.locale
?我们在应用程序控制器中使用了一个
before\u过滤器
,它总是根据
params[:locale]
、cookie或用户设置(按该顺序)来设置区域设置。我确实在应用程序控制器中得到了这一点。这就是我感到困惑的原因。在_filter:set_locale def set_locale I18n.locale=params[:locale]| | I18n.default|locale end和locale也正确地出现在params中。嗨,Simon,我对我的路线很满意。问题是,当其他表单(如new job)正常工作时,为什么本地用户使用作业id而不是区域设置。
  = form_for @job, :url => job_path(I18n.locale, @job) do |f|
# in config/routes.rb
Rails.application.routes.draw do
  filter :locale
end
= form_for [I18n.locale, @job] do |f|