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 の場合 (ジョブは、オフィス ジョブの反復からのローカル変数です)

= link_to edit_job_path(I18n.locale, job)

-> localhost: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

言及されている 2 つのジョブがありますが、おそらくなくても構いませんが、表示するジョブの 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 に答える