ruby on rails id不保存

时间:2009-08-11 20:10:11

标签: ruby-on-rails

我知道这违反了ruby on rails约定,但是这个表的id不需要自动递增,而是我通过逻辑设置它。但是,它不会保存到数据库中。保存的所有内容都将id保存为null。

def self.up
 create_table :probes, :id => false do |t|
  t.string :id
  t.string :name
  t.integer :user_id
  t.boolean :online
  t.timestamps
 end
end

<% form_for @probe do |f| %>
<%= f.error_messages %>
 <p>
  <%= f.label "Site name" %><br />
  <%= f.text_field :name %>
 </p>
     <p style="margin-left: 10%">
  <%= f.label "Probe Key" %><br />
  <%= f.text_field :id, :value => @token %>
 </p>
 <p style="margin-left: 20%">
  <%= link_to "Back to List", probes_path %>
  <%= f.submit "Submit",:style => "margin-left: 75px;" %></p>
 <% end %>

这甚至可能吗?或者除了new.html.erb文件之外还有哪些地方我应该更改/检查?

3 个答案:

答案 0 :(得分:5)

:id字段无法进行批量分配。你需要用

手动设置它
  

@probe.id = params[:probe][:id]

在控制器代码中。

(如果您将:id添加到attr_accessible列表,可能会工作,通常您应该为每个直接质量的模型设置attr_accessible - 从表单参数中分配,但没有测试我不确定它是否可行,您可能仍需要手动设置:id

答案 1 :(得分:1)

来自https://stackoverflow.com/questions/517869/id-field-without-autoincrement-option-in- migration

上的AdminMyServer
#using a number
create_table(:table_name, :id => false) do |t|  
  t.integer :id, :options => 'PRIMARY KEY'
end

#using as string, like the question (why?)
create_table(:table_name, :id => false) do |t|  
  t.string :id, :options => 'PRIMARY KEY'
end

答案 2 :(得分:0)

我非常确定ActiveRecord个实例已设置好,因此无法通过质量分配设置id属性,这通常是通过这样的形式创建对象的方式。如果您查看日志,您可能会看到一条警告,说明这些内容。

如果您专门设置ID而不是使用类似p = Probe.new(params[:probe])的内容,那么您应该没问题。 E.g。

p = Probe.new(params[:probe])
p.id = param[:probe][:id]