代码之家  ›  专栏  ›  技术社区  ›  Hemanth

Rails:更新后无法保存对象!

  •  1
  • Hemanth  · 技术社区  · 14 年前

    我是rails开发的新手。 我在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变量仍然没有更新。
    我怀疑在更新之后对象的保存不成功,因为
    上面方法的puts-placed输出了我试图更新的正确值。

    “我的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 回复  |  直到 14 年前
        1
  •  1
  •   zetetic    14 年前

    您不需要自定义方法来完成此任务。Rails有一个方便的方法 update_attribute :

    @post.update_attribute(:bid_winner_id,winner_id)
    

    这将起作用,但即使这样也不是惯用的Rails。如果一个帖子与BidWinner模型关联,并且假设您找到(或创建)一个BidWinner并将其分配给@bid_winner,那么您只需说:

    @post.bid_winner = @bid_winner
    @post.save
    

    还有一件事——你不是真的要通过GET来更新这个,对吧?这通常不是件好事。

        2
  •  3
  •   Chandra Patni    14 年前

    使用访问器方法而不是实例变量 @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