繁体   English   中英

Ruby on Rails我的数据库总是使外键为零,为什么呢?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM