Ruby on Rails未定义的方法

时间:2017-08-25 11:55:36

标签: ruby-on-rails ruby

我打算创建一个指向控制器动作update_heimdall的链接,这里是代码:

app/controller/admins_controller

  def heimdall
    @headline = "Heimdall"
    @users = User.where(deleted_at: nil)
    authorize @users
    @focusUser = params['users'].blank? ? current_user : User.find(params['users'])
    heim = Heimdall.new
    @cards = heim.get_cards(@focusUser.trello_id, @focusUser.trello_access_token, @focusUser.trello_secret_token)
  end

  def update_heimdall 
    @user = params['users'].blank? ? current_user : User.find(params['users'])
    authorize @user
    heim = Heimdall.new
    heim.update_cards(@user.trello_id, @user.trello_access_token, @user.trello_secret_token)
  end

app/views/admins/heimdall.html.rb

<%= link_to "Odśwież", update_heimdall(), class: "btn btn-warning" %>

我附上rails routes命令列出:

heimdall GET    /heimdall(.:format) admins#heimdall                                        
update_heimdall GET   /heimdall/update_heimdall/:id(.:format)   admins#update_heimdall               

不幸的是,此代码会导致以下错误:

  

未定义的方法`update_heimdall&#39;。

1 个答案:

答案 0 :(得分:2)

与您的代码一样,将heim转换为实例变量@heim,以便您可以在视图中访问它。然后在行动路径中调用指定对象。

当您执行rake routes时,您将获得左侧的所有paths

heimdall GET    /heimdall(.:format) admins#heimdall                                        
update_heimdall GET   /heimdall/update_heimdall/:id(.:format)   admins#update_heimdall               

因此您的代码应为:

<%= link_to "Odśwież", update_heimdall_path(@heim), class: "btn btn-warning" %>

有关更多信息,您可以在rails指南上查看此ruby: http://guides.rubyonrails.org/getting_started.html