[英]Ruby on Rails My Database always makes the foreign keys nil why?
这是我的表列表模式
create_table "listings", force: :cascade do |t|
t.string "title"
t.text "description"
t.string "city"
t.string "state"
t.string "zipcode"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "category_id"
t.integer "subcategory_id"
end
这是我的模特:
class Listing < ApplicationRecord
belongs_to :category, required: false
belongs_to :subcategory, required: false
end
每次我通过表单输入数据时,我的数据及其分配的值都记录在数据库中,但是我的外键(category_id,subcategory_id)始终为零? 为什么?
这是我的表格:new.html.erb
<%= form_for @listing do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= f.label :description %>
<%= f.text_area :description %>
<p> <%= f.label :category_id %>
<%= f.select :category_id, Category.all.map {|f| [f.name,f.id]} %></p>
<p> <%= f.label :subcategory_id %>
<%= f.select :subcategory_id, Subcategory.all.map {|f| [f.name,f.id]} %></p>
<%= f.label :city %>
<%= f.text_field :city %>
<%= f.label :state %>
<%= f.text_field :state %>
<%= f.label :zipcode %>
<%= f.text_field :zipcode, class: "zip-width", maxlength: "5" %>
<%= f.submit class:"create-button" %>
<% end %>
这是我的控制器:
class CategoriesController < ApplicationController
def index
@categories = Category.all
@societal = @categories[0] #id 1 bhayekoharu
@onsale = @categories[1]
@housing = @categories[2]
@works = @categories[3]
@services = @categories[4]
@personal = @categories[5]
end
def show
@listings = Listing.where(category_id: params[:id])
end
我的数据库显示以下记录:
<Listing id:6, title: "apartment on rent", description: "rent 5 bed room\r\n800 per month\r\nno pets", city: "aust
in", state: "tx", zipcode: "78749", created_at: "2018-06-21 00:02:40", updated_at: "2018-06-21 00:02:40
", category_id: nil, subcategory_id: nil>,
Here is my full controller for Listing:
class ListingsController < ApplicationController
def new
@listing = Listing.new
end
def create # we have to hold paramaters.
@listing = Listing.new(listing_params)
if @listing.save
redirect_to root_path
else
# redisplay the form if validation failed
render action: 'new'
end
end
def show
@listing = Listing.find(params[:id])
end
private
def listing_params
params.require(:listing).permit(:title, :description, :city, :state, :zipcode,:category, :subcategory)
end
结束
您可能会犯的一个常见错误是不允许这些ids
进入强参数。 检查控制器中listing create action
所在的强参数。
您应该在strong params
允许category_id
和subcategory_id
。
例:
def listing_params
params.require(:listing).permit(:category_id, :subcategory_id)
end
如果您确定同时允许两个参数,请共享您的Rails日志。
不要忘记允许您的Params在您的控制器上。 允许在param.require都可以使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.