-6ren">
gpt4 book ai didi

ruby-on-rails - 验证失败类必须存在

转载 作者:行者123 更新时间:2023-12-03 07:44:01 25 4
gpt4 key购买 nike

我在 Rails 中的关联方面遇到了(几个小时)麻烦。我发现了很多类似的问题,但我无法申请我的案例:

城市类别:

class City < ApplicationRecord
has_many :users
end

用户类别:

class User < ApplicationRecord
belongs_to :city

validates :name, presence: true, length: { maximum: 80 }
validates :city_id, presence: true
end

用户 Controller :

def create
Rails.logger.debug user_params.inspect
@user = User.new(user_params)
if @user.save!
flash[:success] = "Works!"
redirect_to '/index'
else
render 'new'
end
end

def user_params
params.require(:user).permit(:name, :citys_id)
end

用户查看:

<%= form_for(:user, url: '/user/new') do |f| %>
<%= render 'shared/error_messages' %>

<%= f.label :name %>
<%= f.text_field :name %>

<%= f.label :citys_id, "City" %>
<select name="city">
<% @city.all.each do |t| %>
<option value="<%= t.id %>"><%= t.city %></option>
<% end %>
</select>
end

迁移:

class CreateUser < ActiveRecord::Migration[5.0]
def change
create_table :user do |t|
t.string :name, limit: 80, null: false
t.belongs_to :citys, null: false
t.timestamps
end
end

来自控制台和浏览器的消息:

ActiveRecord::RecordInvalid (Validation failed: City must exist):

好吧,问题是,User.save 方法接受用户模型中不属于 FK 的属性,而像 citys_id 这样的 FK 属性则不接受。然后它在浏览器中向我显示错误消息,指出“验证失败的城市必须存在”。

谢谢

最佳答案

尝试以下操作:

belongs_to :city, optional: true

根据new docs :

4.1.2.11 :optional

If you set the :optional option to true, then the presence of theassociated object won't be validated. By default, this option is setto false.

关于ruby-on-rails - 验证失败类必须存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38983666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com