ruby на рельсах не сохраняется - PullRequest
4 голосов
/ 12 августа 2009

Я знаю, что это идет вразрез с ruby ​​на конвенциях rails, но мой идентификатор этой таблицы не нуждается в автоматическом увеличении, и я настраиваю его с помощью логики. Тем не менее, это не сохранение в базе данных. Все, что сохраняется, сохраняется как ноль для идентификатора.

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 ]

5 голосов
/ 12 августа 2009

поле: id недоступно для массового назначения. вам нужно установить его вручную с помощью

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

в коде вашего контроллера.

(Это также может работать, если вы добавите :id в свой список attr_accessible, и, как правило, вы должны установить attr_accessible для каждой модели, которая напрямую присваивается из параметров формы, но без тестирования Я не уверен, что это будет работать, вам все равно придется вручную установить :id)

1 голос
/ 12 августа 2009

Из AdminMyServer на /545690/pole-id-bez-optsii-avtoinkrementa-v-migratsii миграция

#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
0 голосов
/ 12 августа 2009

Я почти уверен, что экземпляры ActiveRecord настроены так, что атрибут id не может быть установлен посредством массового присваивания, как правило, как вы создаете объект с помощью такой формы. Если вы заглянете в свои журналы, вы можете увидеть предупреждение, в котором говорится что-то вроде этого.

Если вы устанавливаете идентификатор специально, а не используете что-то вроде p = Probe.new(params[:probe]), тогда все будет в порядке. Э.Г.

p = Probe.new(params[:probe])
p.id = param[:probe][:id]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...