1

我是 Rails 初学者,并def set_star在 Controller 中创建了一个用于更改属性 onclick。

class EbmsController < ApplicationController
  def index
    @ebms = Ebm.all
  end

  def destroy
    @ebm = Ebm.find(params[:id])
    @ebm.destroy
    redirect_to categories_path
  end

  def create
    @ebm = Ebm.new(params[:ebm])
    @ebm.save
    redirect_to categories_path
  end

  def set_star
    @ebm = Ebm.find(params[:id])
    @ebm.write_attribute(:star, '1')
    redirect_to categories_path
  end
end

该按钮如下所示:

<% for ebm in @ebms do %>
  <tr>
    <td><%= ebm.number %></td>    
    <td><%= ebm.text %></td>
    <td><%= ebm.content %></td>
    <td><%= ebm.star %></td>
    <td><%= link_to 'Star', ebm, :method => :set_star, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>

但不知何故它不起作用,当我单击按钮时,我总是遇到路由错误:

 No route matches [POST] "/ebms/1"

在我的路线中,我简单地定义了:

 resources :ebms

所以,我不知道我做错了什么!谢谢。

4

1 回答 1

5

在你routes.rb添加行

put 'ebms/:id/star', to: 'ebms#set_star', as: 'set_star'

然后改变link_to如下

<%= link_to 'Star', set_star_path(ebm), method: :put, confirm: 'Are you sure?' %>

正如马特里克指出的那样,还将您的控制器更改为@ebm.update_attribute(:star, '1')

于 2013-07-19T12:54:30.673 回答