Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ruby on rails id未保存_Ruby On Rails - Fatal编程技术网

Ruby on rails ruby on rails id未保存

Ruby on rails ruby on rails id未保存,ruby-on-rails,Ruby On Rails,我知道这违反了RubyonRails的约定,但我的表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_fo

我知道这违反了RubyonRails的约定,但我的表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 %>
def self.up
创建表:探测,:id=>false do | t|
t、 字符串:id
t、 字符串:名称
t、 整数:用户id
t、 布尔值:在线
t、 时间戳
结束
结束


@令牌%>


这可能吗?或者除了new.html.erb文件之外,还有什么地方需要我更改/检查吗?

我很确定
ActiveRecord
实例已经设置好,因此
id
属性无法通过批量分配进行设置,而批量分配通常是通过这样的表单创建对象的方式。如果你查看日志,你可能会看到一条警告,上面写着这样的话

如果您专门设置id,而不是使用类似于
p=Probe.new(params[:Probe])
的东西,那么您应该没问题。例如

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

无法访问:id字段进行质量分配。您需要使用手动设置

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

在控制器代码中

(如果您将
:id
添加到
attr\u accessible
列表中,它也可能会起作用,一般来说,您应该为每个直接从表单参数分配质量的模型设置
attr\u accessible
,但是如果不进行测试,我不确定它是否会起作用,您可能仍然需要手动设置
:id

从上的AdminMyServer


我的控制器中有@Probe=Probe.new(params[:Probe])@Probe=params[:Probe][:id],但仍然不工作。这是我的整个创建方法:def create@user=current_user@probe=probe.new(params[:probe])@probe.id=params[:probe][:id]@probe=@user.probes.create!(params[:probe])如果@probe.save flash[:notice]=“成功创建了探测。”重定向到探测路径,否则呈现:action=>“new”end endWell,我有点迟钝,哈哈。我忘了在create方法中传入@probe。但是现在我得到一个关于strigify键的错误…未定义的方法'stringify\u keys!'这是因为我使用了create,它只接受散列@“拯救”很好。问题已修复。不,属性不可用。只有直接赋值,f*ck。这是整数,rails不喜欢非数字主键。至少这是我读到的。有没有办法将字符串设置为主键?我没有注意到您正在使用字符串。。。有什么好的理由吗?这个ID是一个UUID生成的,我之所以这样做是因为我不能拥有我需要的主键,所以我把它作为ID,这样我就可以将我的表正确地连接在一起。
#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