0

我是 Rails 的新手,我似乎无法找到如何将多个表单值从我的视图分配给单个数据库列(模型属性)。所以我尝试了虚拟属性的方法,这是我的代码:

我的观点:

<%= form_for @userinfo do |f|%>
<%= f.label :name %> :
<%= f.text_field :name %><br/> 

<%= f.label  "URL or IP" %>:
<%= f.text_field :URL %> <br> 

<%= f.label "codetype" %>:
<%= f.text_field :codetype %> <br>

<%= f.label "codesnippet" %>:
<%= f.text_field :codesnippet %> <br>

<%= f.submit %>

我需要将代码类型和代码片段值保存在模型的同一列中。

我的架构:

create_table "UserInfo", :force => true do |t|
t.string   "name"
t.string   "URL"
t.string   "code"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

我的模型:

class UserInfo < ActiveRecord::Base
  attr_accessible :URL, :name,  :codetype, :codesnippet
  validates :name, :presence => true
  validates :URL, :presence => true
  validates :name, :format => { :with => /\A[a-zA-Z]+\z/,
   :message => "Only letters allowed" }


    def codetype=(codetype)
      self.code = codetype 
    end

    def codetype
    end

    def codesnippet
    end

    def codesnippet=(codesnippet)
      self.code = codesnippet
    end
end

现在,我知道这是不正确的,因为我的代码值被下一个虚拟属性覆盖。我希望能够将代码类型和代码片段以及其他一些字段组合起来形成一个哈希,然后序列化该哈希以制作数据库列代码。无论如何在 Rails 中可以做到这一点?

4

1 回答 1

0

You can try something like this :

class UserInfo < ActiveRecord::Base
  attr_accessible :URL, :name,  :codetype, :codesnippet, ;code
  validates :name, :presence => true
  validates :URL, :presence => true
  validates :name, :format => { :with => /\A[a-zA-Z]+\z/, :message => "Only letters allowed" }

  def code
    codetype + '-' + codesnippet   #suppose you are joining both values with a hiphen in between
  end

  def code=(codetype, codesnippet)
    self.code = codetype + '-' + codesnippet
  end

end
于 2013-05-23T06:26:56.537 回答