Ruby on rails 没有路由匹配{:action=>;>;";upvote;,:controller=>;>;";幼稚园,:id=>;nil}缺少必需的键:[:id]

Ruby on rails 没有路由匹配{:action=>;>;";upvote;,:controller=>;>;";幼稚园,:id=>;nil}缺少必需的键:[:id],ruby-on-rails,routes,Ruby On Rails,Routes,我刚接触Rails,似乎也遇到过类似的问题,但我无法解决我的问题 我的路线: resources :kindergartens do member do put"like",to:"kindergartens#upvote" end member do post :join post :quit end 我的模型: acts_as_votable 我的控制器: def upvote @kindergarten

我刚接触Rails,似乎也遇到过类似的问题,但我无法解决我的问题

我的路线:

 resources :kindergartens do
    member do
      put"like",to:"kindergartens#upvote"
    end
    member do
      post :join
      post :quit
    end
我的模型:

 acts_as_votable
我的控制器:

 def upvote
    @kindergarten = Kindergarten.find(params[:id])
    @kindergarten.upvote_by current_user
    redirect_to :back
    end
My index.html:

  <%= link_to like_kindergarten_path(@kindergarten), method: :put do %>
    <div class="pi-thumbs-up">
    <i class="fa fa-thumbs-up fa-2x" , style="color:#ff5722;"></i>
    <%= kindergarten.get_upvotes.size %>
    </div>
    <% end %>

既然这是
索引操作
,我想你一定是在循环“幼儿园”

因此,根据行
循环的参数是
幼儿园
而不是
<幼儿园

所以,应该是这样

<%= link_to like_kindergarten_path(kindergarten), method: :put do %>
    <div class="pi-thumbs-up">
    <i class="fa fa-thumbs-up fa-2x" , style="color:#ff5722;"></i>
    <%= kindergarten.get_upvotes.size %>
    </div>
<% end %>


PS:分享你的
索引操作,以及完整的
index.html
,以获得更相关的答案。

幼儿园
内部
index.html.erb
nil
。 要解决此问题,您可能需要执行以下操作之一:

# kindergarten_controller.rb
def index
  @kindergartens = Kindergarten.all
end
您的HTML:

# kindergartens/index.html.erb
<%= @kindergartens.each do |kindergarten|
<%= link_to like_kindergarten_path(kindergarten), method: :put do %>
  <div class="pi-thumbs-up">
    <i class="fa fa-thumbs-up fa-2x" , style="color:#ff5722;"></i>
    <%= kindergarten.get_upvotes.size %>
  </div>
<% end %>
#幼儿园/index.html.erb

分享你的索引操作
@幼稚园
在你的
链接中是
nil
。这个答案看起来和我的答案一样。很可能是因为这是解决这类问题最常见的方法。别担心,我没有抄你的。我只是在发布之前没有刷新页面。没问题,我只是通知你。好的,这很有帮助。干杯我的索引操作和完整的index.html在这里:非常感谢。控制器中既没有
@幼稚园
也没有
幼稚园
,但为什么要在视图中使用它们?我认为这应该是show page的代码。你是对的。show page的代码还可以。我刚刚解决的问题是,我把html代码放错了页面。非常感谢。很高兴听到它被解决了。如果我的回答对你有帮助,你可以接受并投票表决
# kindergartens/index.html.erb
<%= @kindergartens.each do |kindergarten|
<%= link_to like_kindergarten_path(kindergarten), method: :put do %>
  <div class="pi-thumbs-up">
    <i class="fa fa-thumbs-up fa-2x" , style="color:#ff5722;"></i>
    <%= kindergarten.get_upvotes.size %>
  </div>
<% end %>