Rails: не удалось сохранить объект после его обновления! - PullRequest
1 голос
/ 21 ноября 2010

Я новичок в разработке рельсов. У меня есть собственный метод, помещенный в мой класс Post, в котором я хочу обновить определенный атрибут / переменную этого класса Post. Мой метод идет следующим образом: -

def update_bid_winner (winner_id)
  @bid_winner_id = winner_id
  puts @bid_winner_id
  save
  puts "post saved"
end

Но когда я отображаю объект Post, переменная bid_winner_id все еще не обновляется.
Я сомневаюсь, что сохранение объекта не удалось после обновления, потому что
Метод put put вышеуказанным методом выводит правильное значение, которое я пытаюсь обновить.

Журналы из окна моего сервера rails: -

2      <<< Output of the puts placed for debugging
post saved


Started GET "/posts/1/bids/1/offer_bid" for 127.0.0.1 at Sun Nov 21 13:21:59 +0530 2010
Processing by BidsController#offer_bid as HTML
Parameters: {"post_id"=>"1", "id"=>"1"}
User Load (3.1ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
Post Load (3.1ms)  SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 1) LIMIT 1
Bid Load (0.5ms)  SELECT "bids".* FROM "bids" WHERE ("bids"."id" = 1) LIMIT 1
Redirected to http://localhost:3000/posts/1
Completed 302 Found in 167ms

Моя схема сообщений выглядит следующим образом: -

create_table "posts", :force => true do |t|
t.integer  "user_id"
t.string   "title"
t.text     "body"
t.integer  "bid_winner_id"
end  

Что я здесь не так делаю ???

Ответы [ 2 ]

3 голосов
/ 21 ноября 2010

Использовать метод доступа вместо переменной экземпляра @bid_winner_id.

def update_bid_winner (winner_id)
  self.bid_winner_id = winner_id
  puts self.bid_winner_id
  save
  puts "post saved"
end
1 голос
/ 21 ноября 2010

Вам не нужен специальный метод для этого. В Rails есть удобный метод с именем update_attribute:

@post.update_attribute(:bid_winner_id,winner_id)

, который будет работать, но даже это не идиоматические Rails. Если сообщение связано с моделью BidWinner и предполагается, что вы нашли (или создали) BidWinner и присвоили его @bid_winner), тогда вы просто скажете:

@post.bid_winner = @bid_winner
@post.save

Еще одна вещь - вы действительно не обновляете это через GET, не так ли? Как правило, это не очень хорошая вещь.

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