我有2个模特,促销和用户.
Promo belongs_to :user
User has_many :promos
Run Code Online (Sandbox Code Playgroud)
在我的路由中,我有嵌套资源:
devise_for :users
resources :users do
resources :promos
end
Run Code Online (Sandbox Code Playgroud)
我有一个表格来制作新的宣传片 simpleform
<%= simple_form_for [current_user, @promo] do |f| %>
<%= f.input :title, label: "Título de la promoción" %>
<%= f.input :image, label: "Imágen de la promoción", class: "" %>
<%= f.input :description, :as => :text, label: "Descripción de la promoción", :input_html => {class: "materialize-textarea"} %>
<%= f.input :title, label: "Pabrasecreta", class: "validate", input_html: {length: "10"} %>
<%= f.submit "Crear Palabra secreta" , class: "right btn" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
问题是,user.id没有保存在数据库中,所以我nil在做的时候得到:
p = Promo.last
=> #<Promo id: 13, created_at: "2015-06-22 21:44:01", updated_at: "2015-06-22 21:44:01", title: "adad", description: "dasfadf", word_id: nil, shop_id: nil, limit: nil, image: "nevera4.jpg", user_id: nil>
Run Code Online (Sandbox Code Playgroud)
Params正在"正确"传递(为什么提交后的user_id?)
Parameters: {"utf8"=>"?", "authenticity_token"=>"4ckcpcgiKlJVFU3GmvzA1i7JrseE7Yq5IW84uqUtDH4=", "promo"=>{"title"=>"adad", "image"=>#<ActionDispatch::Http::UploadedFile:0x007ff4dec8b510 @tempfile=#<Tempfile:/var/folders/n1/hsg_rvx906lgk_81lrm1x5xr0000gn/T/RackMultipart20150622-13699-1rmge4a>, @original_filename="nevera4.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"promo[image]\"; filename=\"nevera4.jpg\"\r\nContent-Type: image/jpeg\r\n">, "description"=>"dasfadf"}, "commit"=>"Crear Palabra secreta", "user_id"=>"1"}
Run Code Online (Sandbox Code Playgroud)
当您使用嵌套路由时,您需要从参数中获取父ID并将其与表单参数合并.
当您发布表单时,参数看起来像这样:
{
user_id: 1,
promo: {
title: "¡Ay, caramba!"
}
}
Run Code Online (Sandbox Code Playgroud)
做params.require(:promo)...切片params哈希表,所以你只拿到promo钥匙.
def promo_params
params[:promo].permit(:title,:description,:image)
.merge(user_id: params[:user_id])
end
Run Code Online (Sandbox Code Playgroud)