0

set_score我的模型上有一个名为 的方法Client

在我Clients#index看来,我想创建一个按钮/链接,上面写着“更新分数”,而这一切只是将必要的参数发送到该方法并运行它。

我怎么做?

我可以使用 Rails 链接助手来做到这一点吗?

编辑1:

对于它的价值,现在该方法由callback(ie before_save) 执行。但我想让用户能够手动触发它。

4

2 回答 2

0

将动作添加到调用模型上的方法的控制器,然后添加路由以允许请求到达该动作。使您的链接调用该路由。

浏览器不能直接与模型对话。这就是控制器的用途。

于 2012-11-28T22:36:14.780 回答
0

正如@meagar 指出的那样,这样做的方法是在我的控制器中创建一个自定义操作,然后创建一个路由,然后link_to在我的视图中使用该命名路由。

Client#Controller现在有这个方法:

def update_score
    @client = current_user.clients.find(params[:id])
    @client.set_score

respond_to do |format|
  if @client.update_attributes(params[:client])
    format.html { redirect_to clients_url, notice: 'Score was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @client.errors, status: :unprocessable_entity }
    end
  end
end

routes.rb现在有这条路线:

match ':controller/update_score/:id' => 'clients#update_score', :as => :update_score

在我看来,我只是使用了这个链接,client块生成的局部变量在哪里。

<%= link_to 'Update Score', update_score_path(client) %>
于 2012-11-28T23:58:51.170 回答