중첩 된 리소스가있는 레일에서 작업하면 Create/Create 메소드로 리디렉션 된 편집/업데이트 메소드를 사용할 때 문제가 발생합니다. 다음은 내 데모입니다 :중첩 된 리소스가있는 레일스를 편집/업데이트 메소드를 생성 메소드로 리디렉션합니다.
모델
class Model < ActiveRecord::Base
has_many :lineitems, dependent: :destroy
end
class Lineitem < ActiveRecord::Base
belongs_to :model
end
경로
#resources :lineitems
#resources :models
resources :models do
resources :lineitems
end
레이크 노선
lineitems GET /lineitems(.:format)lineitems#index
POST /lineitems(.:format) lineitems#create
new_lineitem GET /lineitems/new(.:format) lineitems#new
edit_lineitem GET /lineitems/:id/edit(.:format) lineitems#edit
lineitem GET /lineitems/:id(.:format) lineitems#show
PATCH /lineitems/:id(.:format) lineitems#update
PUT /lineitems/:id(.:format) lineitems#update
DELETE /lineitems/:id(.:format) lineitems#destroy
models GET /models(.:format) models#index
POST /models(.:format) models#create
new_model GET /models/new(.:format) models#new
edit_model GET /models/:id/edit(.:format) models#edit
model GET /models/:id(.:format) models#show
PATCH /models/:id(.:format) models#update
PUT /models/:id(.:format) models#update
DELETE /models/:id(.:format) models#destroy
model_lineitems GET /models/:model_id/lineitems(.:format) lineitems#index
POST /models/:model_id/lineitems(.:format) lineitems#create
new_model_lineitem GET /models/:model_id/lineitems/new(.:format) lineitems#new
edit_model_lineitem GET /models/:model_id/lineitems/:id/edit(.:format) lineitems#edit
model_lineitem GET /models/:model_id/lineitems/:id(.:format) lineitems#show
PATCH /models/:model_id/lineitems/:id(.:format) lineitems#update
PUT /models/:model_id/lineitems/:id(.:format) lineitems#update
DELETE /models/:model_id/lineitems/:id(.:format) lineitems#destroy
GET /models(.:format) models#index
POST /models(.:format) models#create
GET /models/new(.:format) models#new
GET /models/:id/edit(.:format) models#edit
GET /models/:id(.:format) models#show
PATCH /models/:id(.:format) models#update
PUT /models/:id(.:format) models#update
DELETE /models/:id(.:format) models#destroy
모델 - show.html.erb
<% @model.lineitems.each do |li| %>
<tr>
<td><%= li.tLineitemNumber %></td>
<td><%= link_to 'Show', model_lineitem_path(@model, li) %></td>
<td><%= link_to 'Edit', edit_model_lineitem_path(@model, li) %></td>
</tr>
<% end %>
,451,515,
LINEITEM - edit.html.erb
<%= form_for ([@model, @model.lineitems.build]) do |f| %>
<p>
<%= f.label :tLineitemNumber, "Line Item Number/Level" %><br>
<%= f.text_field :tLineitemNumber %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
lineitems_controller.rb
class LineitemsController < ApplicationController
def create
@model = Model.find(params[:model_id])
@lineitem = @model.lineitems.create(lineitem_params)
if @lineitem.save
redirect_to model_path(@model)
else
render 'new'
end
end
def edit
@model = Model.find(params[:model_id])
@lineitem = @model.lineitems.find(params[:id])
end
def update
@model = Model.find(params[:model_id])
@lineitem = @model.lineitems.find(params[:id])
if @lineitem.update(lineitem_params)
redirect_to model_path(@model)
else
render 'edit'
end
end
private
def lineitem_params
params.require(:lineitem).permit(:model_id, :id, :tLineitemNumber)
end
end
"편집"링크를 클릭이 같은 URL로 이동 :
http://localhost/models/2/lineitems/16/edit
그리고를 확인 서버 로그에 다음이 있음 :
Started GET "/models/2/lineitems/16/edit" for 192.168.32.2 at 2015-02-07 18:24:18 +0800
Processing by LineitemsController#edit as HTML
Parameters: {"model_id"=>"2", "id"=>"16"}
Model Load (0.1ms) SELECT `models`.* FROM `models` WHERE `models`.`id` = 2 LIMIT 1
Lineitem Load (0.1ms) SELECT `lineitems`.* FROM `lineitems` WHERE `lineitems`.`model_id` = 2 AND `lineitems`.`id` = 16 LIMIT 1
Rendered lineitems/_form.html.erb (2.9ms)
Rendered lineitems/edit.html.erb within layouts/application (4.1ms)
Completed 200 OK in 238ms (Views: 195.7ms | ActiveRecord: 2.8ms)
Started POST "/models/2/lineitems" for 192.168.32.2 at 2015-02-07 18:26:43 +0800
Processing by LineitemsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"oCGgftEl9emkAhKEkA/NqjXO6qH7nVE7FC9ohZpjmjI=", "lineitem"=>{"tLineitemNumber"=>"bbbb"}, "commit"=>"Create Lineitem", "model_id"=>"2"}
Model Load (0.1ms) SELECT `models`.* FROM `models` WHERE `models`.`id` = 2 LIMIT 1
(0.3ms) BEGIN
SQL (0.3ms) INSERT INTO `lineitems` (`created_at`, `model_id`, `tLineitemNumber`, `updated_at`) VALUES ('2015-02-07 10:26:43', 2, 'bbbb', '2015-02-07 10:26:43')
(62.3ms) COMMIT
(0.3ms) BEGIN
(0.1ms) COMMIT
Redirected to http://localhost/models/2
그래서 편집 페이지에서 편집/업데이트 리디렉션 만들기 방법을 사용하는 이유는 무엇입니까? 누구든지 도움을받을 수 있습니까? 감사합니다.
안녕 Shobhit, 내가 리소스를 삭제했습니다 : lineitems 리소스 : routes.rb에서 모델, 문제가 여전히 존재합니다. – DarWcy
레이크 루트의 출력을 붙여 넣을 수 있습니까 –
안녕하세요 Shobhit, 질문에 레이크 경로의 출력을 추가했습니다. 제발 좀 봐. – DarWcy