我正在尝试将所有值保存到我的数据库中来解决问题。以下是我的应用程序的设置方式
before_filter :load_make, only: :create
def create
@record = @make.message.new(my_params)
@record.save
end
def load_make
make_id = params[:message] ? params[:message][:make_id] : params[:make_id]
@make = Car.find_by(custom_make: make_id)
@make ||= Car.find_by(id: make_id).tap
end
def my_params
params.require(:message).permit(:message_type, :message_date, :make_id)
end
我的问题是我想创建另一个方法,该方法从不同的API执行GET请求,该API返回created_at日期并将其保存在create
上,类似于:
def lookup_car
Car.car_source.find(id: my_params[:make_id]).created_at
# returns a datetime value
end
我正在寻找关于将此问题放入my_params
方法:message_date
的最佳方式的建议,并将其与create
操作中的其他内容一起保存?
模型架构:
create_table "messages", force: :cascade do |t|
t.integer "make_id"
t.string "message", limit: 255
t.datetime "created_at"
t.datetime "updated_at"
t.string "message_type", limit: 255
t.datetime "message_date"
end
答案 0 :(得分:1)
首先,您不应该真正更改/更新/插入created_at
,因为Rails会为您执行此操作。如果有的话,我建议您添加另一栏。
其次,您不应该在Get
请求上创建/更新。
除此之外,只要您准备好该列,就可以轻松地向params
添加其他字段。不确定你的模型是如何构造的,但是你可以在这里做一些如下所示的事情。我们假设你的模型中有message_date
列,你可以这样做:
def my_params
message_date_param = { message_date: Time.now }
params.require(:message).permit(:message_type, :message_date, :make_id).merge(message_date)
end
答案 1 :(得分:0)
我在深夜写这篇文章的时候我可能没什么意义,但基本上我想要的是同时更新另一个值save
@record
。我使用attributes
解决了这个问题,save
更新了但没有调用def create
car = Car.car_source.find(id: my_params[:make_id]).created_at
@record.attributes = { message_date: car }
@record.save
end
(因为我已经在下面这样做了)。
例如:
class Personal_Assistant(BoxLayout):
time_stamp = 0
morning = 'Good Morning'
afternoon = 'Good Afternoon'
evening = 'Good even'
name = 'James'
def timer(self):
self.now = datetime.datetime.now()
if self.now > 5 and self.now <12:
return self.morning, 'James'
elif self.now > 12 and self.now < 5:
return self.afternoon, 'James'
elif self.now > 5 and self.now < 12:
return self.evening, 'James'
还要感谢所有其他评论。我已经完全重构了这段代码,以便更多地使用rails。