Ruby on rails 如何向Rails参数中添加额外值

Ruby on rails 如何向Rails参数中添加额外值,ruby-on-rails,ruby,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] @mak

我试图解决一个问题,将所有值保存到我的数据库中。下面是我的应用程序的设置方式

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返回在日期创建的_,并将其保存在
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_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

首先,您不应该真正更改/更新/插入在处创建的
,因为Rails会为您这样做。如果有的话,我建议你再增加一个专栏

其次,您不应该在
Get
请求中执行和创建/更新操作

除此之外,只要准备好该列,向
参数添加另一个字段就很容易了。不确定你的模型是如何构造的,但在这里你可以做一些类似下面这样的事情。假设您在任何型号中都有
message\u 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

我在深夜写了这篇文章,当时我可能没有什么意义,但本质上我想要的是在
@记录上调用
save
的同时更新另一个值。我通过使用
属性
解决了这个问题,它会更新但不调用
保存
(因为我已经在下面做了)

例如:

def create
  car = Car.car_source.find(id: my_params[:make_id]).created_at
  @record.attributes = { message_date: car }
  @record.save
end

也非常感谢所有其他的评论。我已经完全重构了这段代码,使之更符合rails的习惯用法。

这段代码到处都是危险信号。您在使用框架时偏离了Rails的方向。我鼓励您备份一个步骤,并重新考虑如何构建控制器以满足您的需求。记住:控制器只是另一个对象,而对象在Ruby中非常便宜。对于如何更好地重构上面的代码,有什么建议吗?
lookup\u car
方法实际上是在执行一个http\u请求,以便在仅供参考时获得一个不相关的创建的\u@coreywardI总是建议从优秀的指南开始。在我的示例中,
created_at
方法实际上是对其他内容执行http请求,并在日期(而不仅仅是时间)引入一个不同的、不相关的created_。现在:(.关于在中继续添加其他参数有什么建议吗?这是一个糟糕的方法名称,因为您可能正在重写rails方法(或者不取决于您是如何操作的),但这会使您的团队成员或任何阅读您的代码的人感到困惑。@Robbywillams发布您的模型,模式。我已经用模型模式更新了帖子!谢谢:)我本质上只是想用另一种方法执行GET请求,并在触发
create
操作时保存该请求。