gpt4 book ai didi

ruby-on-rails - Rails 记录不保存

转载 作者:行者123 更新时间:2023-12-04 07:36:13 27 4
gpt4 key购买 nike

我在尝试保存记录(使用 Rails 4、Ruby 2.0.0)时遇到了一个非常简单的错误。

这就是发生的事情。

2.0.0p0 :001 > Startup
=> Startup(id: integer, name: string, url: string, founded: date, mal: boolean,
created_at: datetime, updated_at: datetime, creator: string,
description: text, category: text)

2.0.0p0 :002 > @s = Startup.new(:name => "New Startup",
:url => "http://newstartup.com",
:founded => Date.today,
:mal => false,
:creator => "127.0.0.1",
:description => "This is a description",
:category => ["","Sports"])
=> #<Startup id: nil, name: "New Startup", url: "http://newstartup.com", founded: "2013-04-25", mal: false, created_at: nil, updated_at: nil, creator: "127.0.0.1", description: "This is a description", category: ["", "Sports"]>

2.0.0p0 :003 > @s.save
(0.2ms) BEGIN
(0.3ms) ROLLBACK
=> false

这是我的模型:

class Startup < ActiveRecord::Base
before_validation(:on => :create) do
self.mal = false
end

attr_accessible :name, :url, :description, :category, :creator, :mal, :founded
end

架构:

create_table "startups", force: true do |t|
t.string "name"
t.string "url"
t.date "founded"
t.boolean "mal"
t.datetime "created_at"
t.datetime "updated_at"
t.string "creator"
t.text "description"
t.text "category"
end

和 Controller :

class StartupsController < ApplicationController
before_action :set_startup, only: [:show, :edit, :update, :destroy]
before_create :set_creator

# GET /startups
# GET /startups.json
def index
@startups = Startup.all
end

def land
@startup = Startup.new
@resource = User.new
@devise_mapping = Devise.mappings[:user]
end

# GET /startups/1
# GET /startups/1.json
def show
end

# GET /startups/new
def new
@startup = Startup.new
end

# GET /startups/1/edit
def edit
end

# POST /startups
# POST /startups.json
def create
@startup = Startup.new(startup_params)

respond_to do |format|
if @startup.save
format.html { redirect_to @startup, notice: 'Startup was successfully created.' }
format.json { render action: 'show', status: :created, location: @startup }
else
format.html { render action: 'new' }
format.json { render json: @startup.errors, status: :unprocessable_entity }
end
end
end

# PATCH/PUT /startups/1
# PATCH/PUT /startups/1.json
def update
respond_to do |format|
if @startup.update(startup_params)
format.html { redirect_to @startup, notice: 'Startup was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @startup.errors, status: :unprocessable_entity }
end
end
end

# DELETE /startups/1
# DELETE /startups/1.json
def destroy
@startup.destroy
respond_to do |format|
format.html { redirect_to startups_url }
format.json { head :no_content }
end
end

private
# Use callbacks to share common setup or constraints between actions.
def set_startup
@startup = Startup.find(params[:id])
end

def set_creator
@startup.creator = request.remote_ip
end

# Never trust parameters from the scary internet, only allow the white list through.
def startup_params
params.require(:startup).permit(:name, :url, :added, :founded, :mal, :creator, :description, {:category => []})
end
end

当我想将 Startup.category 从字符串切换到字符串列表时,我才开始遇到这个问题。

我做错了什么或者我在哪里可以找到更多错误信息?

最佳答案

whateverModel.save 不会引发任何异常,但会返回 true(模型已保存)或 false。如果您调用 savecreateupdate_attributes(没有爆炸)或 valid?,您的模型将公开一个 errors 属性,来自控制台:

puts @s.errors.messages.inspect

更新:

before_validation 中的最后一个(也是唯一一个)表达式返回 false,这意味着事务将被中止,请尝试:

self.mal=false
true

关于ruby-on-rails - Rails 记录不保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16226966/

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