Простое целое поле сохраняет как ноль - PullRequest
1 голос
/ 26 февраля 2011

Недавно я добавил новое поле mapicon_id в свои записи места проведения, где отображаются все доступные значки в раскрывающемся списке «Новое» и «Изменить». Каждая запись также имеет верхнее и левое целочисленные поля, которые позволяют мне указать координаты для абсолютного позиционирования значков с помощью JavaScript.

До того, как я добавил новое поле mapicon_id, верхнее и левое поля работали нормально, но теперь левое поле не сохранится. Вы можете отредактировать поле или создать новую запись с левым значением и нажать кнопку «Сохранить», после чего оно выдаст успешное флэш-сообщение и правильно перенаправит, но поле будет пустым.

место проведения частичное:

<%= link_to venue do %>
  <div class="venue_partial">

    <div class="venue_icon">
      <%= image_tag venue.venuetype.photo.url(:thumb), :class => 'image' %>
    </div>
  </div>
<% end %>

<%= link_to venue do %>
  <div id="venue_map_icon_<%= venue.id %>" style="position:absolute;"><%= image_tag venue.mapicon.photo.url(:thumb), :class => 'venue_map_icon' %></div>
<% end %>

<script>
  document.getElementById("venue_map_icon_<%= venue.id %>").style.left= "<%= venue.left %>px";
  document.getElementById("venue_map_icon_<%= venue.id %>").style.top= "<%= venue.top %>px";
</script>

редактировать и новые:

<%= form_for @venue do |f| %>
  <p>name: <br>
  <%= f.text_field :name %></p>

  <p>mapicon: <br>
  <%= f.collection_select(:mapicon_id, Mapicon.all, :id, :name) %>

  <p>top: <br>
  <%= f.text_field :top %></p>

  <p>left: <br>
  <%= f.text_field :left %></p>

  <%= submit_tag %>
<% end %>

журнал разработки при редактировании записи с верхним и левым значениями 100:

Started GET "/venues/45-test-place/edit" for 127.0.0.1 at 2011-02-26 11:07:10 +0000
  Processing by VenuesController#edit as HTML
  Parameters: {"id"=>"45-test-place"}
  [1m[35mVenue Load (1.0ms)[0m  SELECT `venues`.* FROM `venues` WHERE `venues`.`id` = 45 LIMIT 1
  [1m[36mArea Load (0.0ms)[0m  [1mSELECT `areas`.* FROM `areas`[0m
  [1m[35mVenuetype Load (0.0ms)[0m  SELECT `venuetypes`.* FROM `venuetypes`
  [1m[36mMapicon Load (1.0ms)[0m  [1mSELECT `mapicons`.* FROM `mapicons`[0m
Rendered venues/edit.html.erb within layouts/application (108.0ms)
Completed 200 OK in 150ms (Views: 127.0ms | ActiveRecord: 2.0ms)


Started POST "/venues/45-test-place" for 127.0.0.1 at 2011-02-26 11:07:16 +0000
  Processing by VenuesController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"By8blc3esfE6A8tnfOmRPn9f4KZb/ctwpjg86La4d1Y=", "venue"=>{"name"=>"test place", "addressline1"=>"", "addressline2"=>"", "addressline3"=>"", "phonenumber"=>"", "area_id"=>"8", "venuetype_id"=>"15", "mapicon_id"=>"1", "top"=>"100", "left"=>"100"}, "commit"=>"Save changes", "id"=>"45-test-place"}
  [1m[35mVenue Load (1.0ms)[0m  SELECT `venues`.* FROM `venues` WHERE `venues`.`id` = 45 LIMIT 1
  [1m[36mSQL (0.0ms)[0m  [1mBEGIN[0m
  [1m[35mAREL (0.0ms)[0m  UPDATE `venues` SET `top` = 100, `left` = 100, `updated_at` = '2011-02-26 11:07:16' WHERE `venues`.`id` = 45
  [1m[36mSQL (30.0ms)[0m  [1mCOMMIT[0m
Redirected to http://localhost:3000/venues.45-test-place
Completed 302 Found in 65ms

После редактирования этой записи в верхнем поле отображается 100, но в левом поле пусто.

модель объекта:

class Venue < ActiveRecord::Base
  belongs_to :user
  has_many :reviews
  belongs_to :area
  belongs_to :venuetype
  belongs_to :mapicon

  scope :with_type, lambda { |types|
    types.present? ? where(:venuetype_id => types) : scoped }

  scope :with_area, lambda { |areas|
    areas.present? ? where(:area_id => areas) : scoped }

  def to_param
    "#{id}-#{name.gsub(/\W/, '-').downcase}"
  end

  def self.search(search)
    if search
      where('name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end
end

модель Mapicon:

class Mapicon < ActiveRecord::Base
  has_many :venues
  has_attached_file :photo,
    :styles => {
      :thumb=> "100x100>",
      :small  => "150x150>",
      :medium => "300x300>",
      :large =>   "400x400>" },
    :default_url => '/images/noimage.png'
end

UPDATE

Я удалил верхнее и левое поля и добавил toppx и leftpx, чтобы имена полей не были такими общими, однако проблема все еще существует, только теперь это поле toppx, которое не сохраняется. Кроме того, если я изменю javascript на значение venuetype_id вместо значения toppx, оно будет отображаться правильно. значение venuetype_id равно 15, а значок отображается в 15 пикселей сверху страницы.

новая миграция:

class AddToppxAndLeftpxToVenues < ActiveRecord::Migration

  def self.up
    add_column :venues, :toppx, :integer
    add_column :venues, :leftpx, :integer
  end

  def self.down
    remove_column :venues, :toppx
    remove_column :venues, :leftpx
  end
end

ДРУГОЕ ОБНОВЛЕНИЕ

irb(main):002:0> v=Venue.new
=> #<Venue id: nil, name: nil, addressline1: nil, addressline2: nil, addressline
3: nil, created_at: nil, updated_at: nil, area_id: nil, user_id: nil, venuetype_
id: nil, phonenumber: nil, toppx: nil, leftpx: nil>
irb(main):003:0> v.name='test23'
=> "test23"
irb(main):004:0> v.leftpx='24'
=> "24"
irb(main):005:0> v.toppx='42'
=> "42"
irb(main):006:0> v.venuetype_id='13'
=> "13"
irb(main):007:0> v.area_id='2'
=> "2"
irb(main):008:0> v.user_id='6'
=> "6"
irb(main):009:0> v.save
=> true
irb(main):010:0> Venue.find(:last)
=> #<Venue id: 55, name: "test23", addressline1: nil, addressline2: nil, address
line3: nil, created_at: "2011-02-28 18:07:42", updated_at: "2011-02-28 18:07:42"
, area_id: 2, user_id: 946706424, venuetype_id: 13, phonenumber: nil, toppx: nil
, leftpx: 24>
irb(main):011:0>

С другой стороны, я не знаю, что там происходит с изменением user_id, но он работает правильно и ассоциируется с правильным пользователем.

Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 28 февраля 2011

Похоже, вы должны использовать toppx и leftpx только для top и left:

<%= form_for @venue do |f| %>
  <p>name: <br>
  <%= f.text_field :name %></p>

  <p>mapicon: <br>
  <%= f.collection_select(:mapicon_id, Mapicon.all, :id, :name) %>

  <p>top: <br>
  <%= f.text_field :toppx %></p>

  <p>left: <br>
  <%= f.text_field :leftpx %></p>

  <%= submit_tag %>
<% end %>
0 голосов
/ 22 марта 2011

Исправлено, вставляя новую копию libmySQL.dll в папку ruby ​​bin.

0 голосов
/ 27 февраля 2011

SQL-запрос, который сделал Rails (UPDATE ...), выглядит нормально, поэтому либо не может быть правильно сохранен вашей базой данных, либо Rails не получит его обратно из БД правильно.

Посмотрите на базу данных.Сделайте SELECT * FROM мест, где id = 45, и посмотрите на этот результат, чтобы увидеть, правильно ли он там сохранен.Также опубликуйте свою схему (ОПИСАНИЕ мест).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...