我有我的迁移:
class CreateCourses < ActiveRecord::Migration
def change
create_table :courses, :id => false do |t|
t.uuid :id, :primary_key => true, :null => false
t.datetime :date_start, :null => false
t.float :price, :null => false
t.datetime :date_end
t.text :description
t.text :location, :null => false
t.timestamps
end
end
end
我的控制器中有create
方法:
def create
course = Course.new(params[:course])
if course.save
render :nothing => true
else
render "public/422", :status => 422
return
end
end
现在,当我使用任何数据调用create
方法时,它会在我的Course
表中创建一个新的空行。但是,我想确保发送给create的对象实际上是一个Course对象,并且位置和价格(例如)不是空的并且存在。
我有ASP.NET MVC背景,所以我刚开始学习Rails。
P.S如何在成功创建时返回成功200响应,而不是render :nothing => true
?
答案 0 :(得分:5)
检查模型验证:
http://guides.rubyonrails.org/active_record_validations.html#validates-associated
但作为一个例子:
class Library < ActiveRecord::Base
has_many :books
validates_associated :books
end
答案 1 :(得分:1)
通常,您需要在模型中进行验证,以确保您不会创建无效的记录,如:
class Course < ActiveRecord::Base
...
validates :location, :price, presence: true
...
在返回成功回复方面,您可能要做的是在完成以下处理后重定向到show
页面:
def update
respond_to do |format|
if @course.save
format.html { redirect_to @course, notice: 'Course was successfully created.' }
end
end
end
同样,运行代码将对象放入控制器中的方法中也是一个不错的主意,这意味着代码重复更少!:
class CourseController < ApplicationController
before_action :set_course
...
def set_course
@course = Course.find(params[:id])
end
...