Em *_*Sta 1 ruby-on-rails ruby-on-rails-3
我是一个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
Run Code Online (Sandbox Code Playgroud)
按钮看起来像这样:
<% 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 %>
Run Code Online (Sandbox Code Playgroud)
但不知怎的,它不会工作,当我点击按钮时,我总是收到路由错误:
No route matches [POST] "/ebms/1"
Run Code Online (Sandbox Code Playgroud)
在我的路线中,我只是定义:
resources :ebms
Run Code Online (Sandbox Code Playgroud)
所以,我不知道我做错了什么!谢谢.
在你的routes.rb添加行
put 'ebms/:id/star', to: 'ebms#set_star', as: 'set_star'
Run Code Online (Sandbox Code Playgroud)
然后改变link_to如下
<%= link_to 'Star', set_star_path(ebm), method: :put, confirm: 'Are you sure?' %>
Run Code Online (Sandbox Code Playgroud)
正如马瑟里克所指出的,也将你的控制器更改为 @ebm.update_attribute(:star, '1')