オフィスと各オフィスで利用可能な仕事を一覧表示するアカウント ダッシュボードがあります。
階層:
- 会社 (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|