如何在Rails参数中添加额外的值

时间:2017-01-05 00:19:36

标签: ruby-on-rails ruby

我正在尝试将所有值保存到我的数据库中来解决问题。以下是我的应用程序的设置方式

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

2 个答案:

答案 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。