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
操作时保存该请求。