[Rails3] Невозможно вызвать пользовательский метод почтового контроллера за пределами почтового контроллера - PullRequest
0 голосов
/ 21 ноября 2010

Я определил один из моих пользовательских методов в PostsController следующим образом: -

class PostsController < ApplicationController
 ...<<other methods truncated from display >>
  public
    def update_bid_winner (winner_id)
    @post.bid_winner_id = winner_id
    @post.save
  end  
end  

Но когда я пытаюсь вызвать его с другого контроллера (в моем случае это BidsController). Где Bid является вложенным ресурсом публикации: -

resources :posts do
  resources :bids do
    member do
      get 'offer_bid'
    end
  end
 end  

Я попытался вызвать свой пользовательский метод следующим образом из контроллера ставок: -

 def offer_bid
   @post = Post.find(params[:post_id])
   @bid = Bid.find(params[:id])
   @post.update_bid_winner(@bid.user_id)  <<<<<<<<<< Here goes the call
   @post.save
    redirect_to post_path(@post)
end

Но я получаю сообщение о том, что неопределенный метод update_bid_winner: -

undefined method `update_bid_winner' for #<Post:0xb68114f4>  

Помоги мне. я делаю что-то не так здесь? Если да, пожалуйста, предложите способы достичь того же самого!

Заранее спасибо.

Ответы [ 3 ]

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

Это не работает, потому что вы вызываете метод для объекта Post, но вы определили метод в классе PostsController.Этот метод должен быть определен в файле модели Post (app / models / post.rb), чтобы он работал так, как вам нужно.

Как правило, методы, которые обновляют объект, должны идти в соответствующем классе этого объекта.

1 голос
/ 21 ноября 2010

PostsController и Post - это два разных класса.Обратите внимание, что @post является объектом Post: @post = Post.find(params[:post_id])

Определите метод в app/models/post.rb вместо app/controllers/posts_controller.rb.

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

На самом деле лучший способ решить мою задачу - использовать следующую строку в самом контроллере: -

@post.update_attribute(:bid_winner_id,@bid.user_id)  

Нет необходимости в каких-либо новых методах в модели для обновления атрибута.
Но входные данныепри условии, что другие ответы действительно помогли мне просветить :).Спасибо.

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