我在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)中调用它时。如果投标是帖子的必要资源: -
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>
帮帮我。我在这做错什么吗?如果是这样,请建议实现相同的方法!!
先谢谢。
答案 0 :(得分:2)
这不起作用,因为您在Post
对象上调用该方法,但您已在PostsController
类中定义了该方法。必须在Post模型文件(app / models / post.rb)中定义此方法才能使其按您的需要工作。
通常,更新对象的方法应该放在该对象的相应类中。
答案 1 :(得分:1)
PostsController和Post是两个不同的类。注意@post是一个Post对象:@post = Post.find(params[:post_id])
在app/models/post.rb
而不是app/controllers/posts_controller.rb
中定义方法。
答案 2 :(得分:0)
实际上,实现我的任务的最佳方法是在控制器本身使用以下行: -
@post.update_attribute(:bid_winner_id,@bid.user_id)
模型中不需要任何新方法来更新属性 但作为其他答案提供的输入真的有助于启发我:)。感谢。