我敢肯定这是一个非常明显的初学者问题,但试图在 google 上找到初学者 Ruby 问题的答案是徒劳的。
无论如何,假设我有一个如下所示的数据库表:
MyMessage
==================
int :id
string :from
string :to
string :messagetext
现在,如果我需要以以下形式公开接受查询字符串参数的 URL:
将查询字符串参数映射到我的模型的最佳方法是什么?
现在,我只是通过 Controller 内部的蛮力来完成:
@sender = params[:sender]
@receiver = params[:receiver]
@message = params[:message]
@mymessage = MyMessage.new
@mymessage.from = @sender
@mymessage.to = @receiver
@mymessage.messagetext = @message
@mymessage.save
我的猜测是我应该能够创建一个类来表示这种类型的查询字符串请求,即
class Request
attr_accessor :from
attr_accessor :to
attr_accessor :message
end
然后使用一些 RoR 魔法从 params
创建 Request
对象,然后使用更多魔法创建映射 Request
对象的方法到 MyMessage
对象。
有什么建议吗?这完全有意义吗?
最佳答案
你可以这样做:
class MyMessage < ActiveRecord::Base
def self.new_from_web(params)
returning(self.new) do |message|
message.from = params[:sender]
message.to = params[:receiver]
message.messagetext = params[:message]
message.save
end
end
end
class MessageController < ApplicationController
def save_message
MyMessage.new_from_web(params)
end
end
当然,通过使用更明确的 RESTful 语义,整个事情可能会变得更简单和更常规。
关于ruby-on-rails - Ruby 自定义类模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/986717/