我一直在尝试使用create函数将输入数据从我的表单推送到数据库,但是create function中的实例变量不断返回' nil '并在'之后开始交易',它确实'回滚交易'
模型函数在我获得所需的解析数据时工作正常, timetables_params 函数也是如此。但是 timetables_params [:start_time] 总是返回'nil',即使 timetables_params 返回所有 start_time 值并且< em> 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
答案 0 :(得分:0)
您的user
可能没有设置belongs_to :user
,我在您的代码中的任何位置都没有看到它。这就是为什么它会回滚,你可能需要在你的时间表模型中user_id
。我的建议如下:
代替:
@timetable = Timetable.create(timetables_params)
使用构建:
@timetable = current_user.timetables.build(timetables_params)
答案 1 :(得分:0)
感谢上面的所有帮助,但事实证明我只需在模型中添加以下行并修改控制器创建功能:
<强>模型强>
validates :user_id, presence: true
validates :start_time, :end_time, presence: true
<强>控制器强>
def create
@timetable = current_user.timetables.build(timetables_params)
if @timetable.save
flash[:success] = "Done"
else
render 'new'
end
并且,我不一定需要解析日期时间值,Rails会自动执行此操作