내 응용 프로그램에서 작동하는 Globalize3을 얻으려고합니다. 나는 번역하고자하는 블로그 게시물의 장난감 프로젯을 가지고있다.form_for ID와 로케일 매개 변수를 섞음
내 URL은 다음과 같이 : localhost/en/posts
localhost/fr/posts
여기 내가 작성 및 게시물을 업데이트하기 위해 같은 form_for
을 사용하고 내 ApplicationController
before_action :set_locale
def set_locale
I18n.locale = params[:locale] if params[:locale] || I18n.default_locale
end
에서 그것을 할 방법입니다.
<%= 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
에 전달 된 매개 변수를 혼합합니다.
없음 경로 일치에게 : 즉, 오류 메시지의 {: 행동 => "쇼": 컨트롤러 => "게시물": 로케일 => # : ID => 무기 호 : 형식 => 전무} 실종 필요한 키 : [: 로케일 : ID]
내 질문은 : 왜 그 일을합니까 내가 thix을 어떻게 해결할 수 있습니까? 내 게시물이 id
new
와
<%= form_for(@post, url: {action: 'show', id: @post, locale: params[:locale]}) do |f| %>
그래서 update
와 함께 작동하지만이 :
나는 이미이에
form_for
선언 변경과 같은 몇 가지를 시도했습니다
No route matches {:action=>"show", :locale=>"en", :id=>#<Post id: nil, created_at: nil, updated_at: nil, title: nil, text: nil>, :controller=>"posts"}
그래서 그래, 난 정말 만들고 업데이트에 대한이 양식을 사용하지 않으려는 내가 그 일을 피할 수 있다면. 이 작업을 수행하는 좋은 방법이 있습니까?
편집 :
여기 내 레이크 노선
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