我正試圖讓Globalize3在我的應用程序上工作。我有博客帖子的玩具項目,我想翻譯。form_for混合id和區域設置參數
我的網址是這樣的:localhost/en/posts
localhost/fr/posts
這裏是我如何做到這一點,我ApplicationController
before_action :set_locale
def set_locale
I18n.locale = params[:locale] if params[:locale] || I18n.default_locale
end
我使用的是相同的form_for
創建和更新的帖子。這裏的視圖代碼:
<%= form_for(@post) do |f| %>
...
<% end %>
它工作得很好,當我去到/new
頁,這裏的控制器代碼:
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to action: :show, id: @post.id
else
render 'new'
end
end
但是,當我嘗試編輯後的URL /en/posts/1/edit
,它混合傳遞給form_for
的參數。這是錯誤信息:
沒有路由匹配{:action =>「show」,:controller =>「posts」,:locale =>#,:id => nil,:format => nil}需要的鍵:[:locale,:id]
我的問題是:爲什麼它會這樣做,如何修復thix?
我已經嘗試過像改變form_for
聲明這一些事情:
<%= form_for(@post, url: {action: 'show', id: @post, locale: params[:locale]}) do |f| %>
所以它的工作原理與update
但與new
,因爲我的文章沒有一個id
No route matches {:action=>"show", :locale=>"en", :id=>#<Post id: nil, created_at: nil, updated_at: nil, title: nil, text: nil>, :controller=>"posts"}
所以是的,我真的不想用2種形式來創建和更新如果我能避免這樣做。有沒有這樣做的好方法?
編輯:
這裏是我的耙路線
Prefix Verb URI Pattern Controller#Action
posts GET /:locale/posts(.:format) posts#index {:locale=>/en|fr/}
POST /:locale/posts(.:format) posts#create {:locale=>/en|fr/}
new_post GET /:locale/posts/new(.:format) posts#new {:locale=>/en|fr/}
edit_post GET /:locale/posts/:id/edit(.:format) posts#edit {:locale=>/en|fr/}
post GET /:locale/posts/:id(.:format) posts#show {:locale=>/en|fr/}
PATCH /:locale/posts/:id(.:format) posts#update {:locale=>/en|fr/}
PUT /:locale/posts/:id(.:format) posts#update {:locale=>/en|fr/}
DELETE /:locale/posts/:id(.:format) posts#destroy {:locale=>/en|fr/}
你能顯示耙路線的輸出嗎?你說你在編輯時遇到這個錯誤?您點擊哪個鏈接進入編輯頁面? – dax