[英]Form_for work but doesn't save into table
我想制作一個簡單的form_for
但是不能完全正常工作。
我有兩個表:Users-> has_many-> Cvs
這是我的表格:
<%= form_for(:cvs, action: "create", html: { method: :post }) do |f| %>
Nom : <%= f.text_field :nom %><br />
<%= f.submit %>
<% end %>
在我的控制器中:
def create
@cv = Cv.new(cv_params)
@cv.save
end
使用cv_params:
def cv_params
params.require(:cv).permit(:nom)
end
在我的route.rb中:
post 'createcv' => 'static_pages#createcv'
我控制器static_pages
,我的觀點是createcv
場出現,當我加載視圖,我把東西但沒有在表中創建(沒有錯誤)。 我該如何糾正?
編輯:
日志
Started GET "/createcv" for ::1 at 2015-06-16 17:22:03 +0200
Processing by StaticPagesController#createcv as HTML
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Cv Load (0.0ms) SELECT "cvs".* FROM "cvs" WHERE "cvs"."user_id" = ? [["user_id", 1]]
Rendered static_pages/createcv.html.erb within layouts/application (10.0ms)
Rendered layouts/_shim.html.erb (1.0ms)
Rendered layouts/_header.html.erb (2.0ms)
Rendered layouts/_footer.html.erb (1.0ms)
Completed 200 OK in 582ms (Views: 570.6ms | ActiveRecord: 0.0ms)
Started POST "/createcv" for ::1 at 2015-06-16 17:22:12 +0200
Processing by StaticPagesController#createcv as HTML
Parameters: {"utf8"=>"V", "authenticity_token"=>"28oSelskM87GZ/geLj6yl3tOrtvKktH/poBasO4pyt7I2QNKxw9HX4J+yS3cmisuzmGOGnr+6IxZdh+uQGDRDQ==", "cvs"=>{"nom"=>"hjsvqsv"}, "commit"=>"Save Cvs"}
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Cv Load (0.0ms) SELECT "cvs".* FROM "cvs" WHERE "cvs"."user_id" = ? [["user_id", 1]]
Rendered static_pages/createcv.html.erb within layouts/application (11.0ms)
Rendered layouts/_shim.html.erb (0.0ms)
Rendered layouts/_header.html.erb (1.0ms)
Rendered layouts/_footer.html.erb (0.0ms)
Completed 200 OK in 643ms (Views: 629.0ms | ActiveRecord: 1.0ms)
params.require(:cv).permit(:nom)
應該
params.require(:cvs).permit(:nom)
因為所有參數都嵌套在:cvs
而不是:cv
另外,請查看您的日志和路線:
Processing by StaticPagesController#createcv
您需要將操作重命名為createcv
。
無論如何,您的應用程序中的路由似乎是錯誤的...除非您這樣希望。
理想情況下,您應該執行以下操作:
在static_pages
控制器,動作createcv
你會發起新的CV對象:
def createcv
...
@cv = Cv.new
end
在createcv.html.erb
,格式如下:
<%= form_for @cv do |f| %>
Nom : <%= f.text_field :nom %><br />
<%= f.submit %>
<% end %>
rails會知道表單中的@cv是一個新對象,它將為表單添加正確的路由,該路由將通過post method
指向/cvs
(取決於您的應用程序)。 這意味着當您提交cv時,從cv_controller
create
的cv_controller
應處理其余的過程。 在這種情況下,您將不需要添加的路由,添加resources :cvs
后它應該在此處resources :cvs
這只是一個可能不符合您需求的示例,因為我不知道您是如何命名模型,控制器等的。
Rajarshi Das的答案很好,只是在我看來,您想通過訪問/ createcv打開表單。 因此將路線更改為:
# routes.rb
get '/createcv', to: 'static_pages#new'
post 'create', to: 'static_pages#create'
# static_pages controller
def new
@cv = Cv.new
end
def create
@cv = Cv.new(cv_params)
if @cv.save
flash[:alert] = 'Cv created!'
else
render 'new'
flash[:alert] = 'Error in form'
end
private
def cv_params
params.require(:cv).permit(:nom) # :cv must be singular
end
# static_pages/new.html.erb view
<%= form_for @cv do |f| %>
<p>
<%= f.label :nom %>
<%= f.text_field :nom %>
</p>
<%= f.submit %>
<% end %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.