簡體   English   中英

Form_for工作但不保存到表中

[英]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 createcv_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM