【发布时间】:2016-09-05 23:26:47
【问题描述】:
我一直在尝试使用 create 函数将输入数据从我的表单推送到数据库,但是 create 函数中的实例变量不断返回 'nil' 并且在 '开始事务',它执行'回滚事务'
当我获得所需的解析数据时,模型函数工作正常,timetables_params 函数也是如此。但是 timetables_params[:start_time] 总是返回 'nil' 即使 timetables_params 返回所有 start_time 值并且 end_time 值。
我该如何解决这个问题?
这是我的控制器
def index
@user = current_user
@timetables = @user.timetable.all
end
def new
@timetable = Timetable.new
end
def create
timetables_params[:start_time] = Timetable.parse_timetable_time(timetables_params, 'start')
timetables_params[:end_time] = Timetable.parse_timetable_time(timetables_params, 'end')
@timetable = Timetable.create(timetables_params)
if @timetable.save
flash[:success] = "Done"
else
render 'new'
end
end
private
def timetables_params
params.require(:timetable).permit(:user_id, :start_time, :end_time)
end
end
这是我的模型
belongs_to :user
attr_accessor :user, :start_time, :end_time
def self.parse_timetable_time(hash, type)
date_string = hash["#{type}_time(1i)"].to_s + "=" + hash["#{type}_time(2i)"].to_s + "=" + hash["#{type}_time(3i)"]
Time.parse(date_string)
end
【问题讨论】:
-
为什么事务回滚?控制台输出/日志还包括什么?
-
它只包括:<:parameters>"", "start_time(2)"=>"1", "start_time(3i)"=>" 1", "start_time(4i)"=>"00", .....} 允许:true> 开始事务回滚事务在布局/应用程序中渲染时间表/new.html.erb
-
将
@timetable = Timetable.create(timetables_params)中的create改成create!,下面的save改成save!,然后重新运行。然后查看控制台看看有没有抛出异常。 -
(hash.type)中有错字应该是逗号 -
更改创建和保存返回用户必须存在的错误,但通过current_user.timetables.build(timetables_params)解决。但是,除了 user_id 之外,它仍然返回“nil”值。
标签: ruby-on-rails ruby model-view-controller ruby-on-rails-5