ruby-on-rails - Ruby 自定义类模型

标签 ruby-on-rails ruby

我敢肯定这是一个非常明显的初学者问题,但试图在 google 上找到初学者 Ruby 问题的答案是徒劳的。

无论如何,假设我有一个如下所示的数据库表:

MyMessage
==================
int :id
string :from
string :to
string :messagetext

现在,如果我需要以以下形式公开接受查询字符串参数的 URL:

http://mysite.com/?sender=alice&receiver=bob&message=Hello

将查询字符串参数映射到我的模型的最佳方法是什么?

现在,我只是通过 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/

相关文章:

ruby-on-rails - CarrierWave - PDF - 只选择第一页

ruby-on-rails - Minitest IntegrationTest ArgumentError : unknown keyword: session

ruby-on-rails - rails belongs_to multiple models 如何在 Controller 中创建

ruby-on-rails - 恢复生产数据库备份的一部分

ruby-on-rails - 在 Rails 中使用 AWS-SDK Gem、CarrierWave 和 Sidekiq 进行转码

ruby-on-rails - Grails 中是否提供 Rails 风格的链式查询?

jquery - Sinatra View 在某些删除请求后不会刷新

ruby - 如何根据标题查找并单击对象?

ruby - 在 Ruby 中实现数组的 to_s

ruby-on-rails - Rails - acts_as_taggable_on 在编辑时删除逗号