Rails: 部分形式的条件路径
Rails: Conditional path in form partial
我有两种用于新建和编辑的表单,我想将其部分提取,但是,据我在 Rails 中的初学者知识,它们需要不同的路径才能工作。
这是我的编辑表单:
<%= simple_form_for [@user, @wiki], url: user_wiki_path do |f| %>
<%= f.input :title %>
<%= f.input :body %>
<%= f.submit class: "btn btn-success" %>
<% end %>
这是我的新表格:
<%= simple_form_for [@user, @wiki], url: user_wikis_path, method: :post do |f| %>
<%= f.input :title %>
<%= f.input :body %>
<%= f.submit class: "btn btn-success" %>
<% end %>
我可以,如果可以,如何将它们组合成一个部分 _form.html.erb 有条件地指定路径?
当我现在尝试加入他们时,在尝试编辑时出现以下错误:
No route matches [PATCH] "/users/32/wikis"
这些是我的路线:
Prefix Verb URI Pattern Controller#Action
users_index GET /users/index(.:format) users#index
users_show GET /users/show(.:format) users#show
root GET / pages#index
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
user_wikis POST /users/:user_id/wikis(.:format) wikis#create
new_user_wiki GET /users/:user_id/wikis/new(.:format) wikis#new
edit_user_wiki GET /users/:user_id/wikis/:id/edit(.:format) wikis#edit
user_wiki PATCH /users/:user_id/wikis/:id(.:format) wikis#update
PUT /users/:user_id/wikis/:id(.:format) wikis#update
DELETE /users/:user_id/wikis/:id(.:format) wikis#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
wikis GET /wikis(.:format) wikis#index
wiki GET /wikis/:id(.:format) wikis#show
charges POST /charges(.:format) charges#create
new_charge GET /charges/new(.:format) charges#new
charge PATCH /charges/:id(.:format) charges#update
PUT /charges/:id(.:format) charges#update
# _form.html.erb
<%= simple_form_for @wiki do |f| %>
<%= f.input :title %>
<%= f.input :body %>
<%= f.submit class: "btn btn-success" %>
<% end %>
并在您的维基#edit 和维基#new 上添加
...
@user = User.find params[:user_id]
...
你可以post局部变量进入partial。像下面这样的东西会起作用:
new.html.erb
<%= render partial: '_form', locals: {url: user_wikis_path, method: :post} %>
edit.html.erb
<%= render partial: '_form', locals: {url: user_wiki_path(@user, @wiki), method: :post} %>
_form.html.erb
<%= simple_form_for [@user, @wiki], url: url, method: method do |f| %>
<%= f.input :title %>
<%= f.input :body %>
<%= f.submit class: "btn btn-success" %>
<% end %>
或者您可以将@url 和@method 设置为实例变量并以这种方式访问它们。
控制器
def new
@method = :get
@url = user_wikis_path
...
end
def edit
@method = :post
@url = user_wiki_path(@user, @wiki)
...
end
_form.html.erb
<%= simple_form_for [@user, @wiki], url: url, method: method do |f| %>
...
或者您可以在访问当前操作的表单中设置条件,如果您在视图中使用 action_name,它将 return 当前操作的名称。
我有两种用于新建和编辑的表单,我想将其部分提取,但是,据我在 Rails 中的初学者知识,它们需要不同的路径才能工作。
这是我的编辑表单:
<%= simple_form_for [@user, @wiki], url: user_wiki_path do |f| %>
<%= f.input :title %>
<%= f.input :body %>
<%= f.submit class: "btn btn-success" %>
<% end %>
这是我的新表格:
<%= simple_form_for [@user, @wiki], url: user_wikis_path, method: :post do |f| %>
<%= f.input :title %>
<%= f.input :body %>
<%= f.submit class: "btn btn-success" %>
<% end %>
我可以,如果可以,如何将它们组合成一个部分 _form.html.erb 有条件地指定路径?
当我现在尝试加入他们时,在尝试编辑时出现以下错误:
No route matches [PATCH] "/users/32/wikis"
这些是我的路线:
Prefix Verb URI Pattern Controller#Action
users_index GET /users/index(.:format) users#index
users_show GET /users/show(.:format) users#show
root GET / pages#index
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
user_wikis POST /users/:user_id/wikis(.:format) wikis#create
new_user_wiki GET /users/:user_id/wikis/new(.:format) wikis#new
edit_user_wiki GET /users/:user_id/wikis/:id/edit(.:format) wikis#edit
user_wiki PATCH /users/:user_id/wikis/:id(.:format) wikis#update
PUT /users/:user_id/wikis/:id(.:format) wikis#update
DELETE /users/:user_id/wikis/:id(.:format) wikis#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
wikis GET /wikis(.:format) wikis#index
wiki GET /wikis/:id(.:format) wikis#show
charges POST /charges(.:format) charges#create
new_charge GET /charges/new(.:format) charges#new
charge PATCH /charges/:id(.:format) charges#update
PUT /charges/:id(.:format) charges#update
# _form.html.erb
<%= simple_form_for @wiki do |f| %>
<%= f.input :title %>
<%= f.input :body %>
<%= f.submit class: "btn btn-success" %>
<% end %>
并在您的维基#edit 和维基#new 上添加
...
@user = User.find params[:user_id]
...
你可以post局部变量进入partial。像下面这样的东西会起作用:
new.html.erb
<%= render partial: '_form', locals: {url: user_wikis_path, method: :post} %>
edit.html.erb
<%= render partial: '_form', locals: {url: user_wiki_path(@user, @wiki), method: :post} %>
_form.html.erb
<%= simple_form_for [@user, @wiki], url: url, method: method do |f| %>
<%= f.input :title %>
<%= f.input :body %>
<%= f.submit class: "btn btn-success" %>
<% end %>
或者您可以将@url 和@method 设置为实例变量并以这种方式访问它们。
控制器
def new
@method = :get
@url = user_wikis_path
...
end
def edit
@method = :post
@url = user_wiki_path(@user, @wiki)
...
end
_form.html.erb
<%= simple_form_for [@user, @wiki], url: url, method: method do |f| %>
...
或者您可以在访问当前操作的表单中设置条件,如果您在视图中使用 action_name,它将 return 当前操作的名称。