1

groups我在 Rails 应用程序中调用的资源上创建了成员路由。

  resources :groups do
    member { post :vote }
  end 

如果我做 rake route,则表明该路由存在

   vote_group POST   /groups/:id/vote(.:format)        groups#vote

在 Ember 中,我创建了一个 GroupController

App.GroupController = Ember.ObjectController.extend({

    actions: {

    vote: function() {

    $.post("vote_group_path", {
      username: this.get("username"),
      id: this.get("id")
     ....

但是,当我在表单上单击提交时,我收到了 no-route match 错误

ActionController::RoutingError (No route matches [POST]"/vote_group_path"):

我想知道这是否是因为我没有通过包含 id 来指定哪个组。在显示每个组的模板中,我可以显示名称和 ID

<script type="text/x-handlebars" id="group">

      {{ model.name }}
      {{ model.id }}
      {{ partial 'groups/form'}} 

</script>

但我不确定如何将id组作为一种隐藏元素包含在表单中(如果这甚至是使路由工作所必需的)

<script type="text/x-handlebars" id="groups/_form">
<form class="form-horizontal" {{action "vote" on="submit"}}>
   <div class="controls">
      {{input value=username type="text"}}
  </div>

  <button type="submit" class="btn">follow</button>
</form>
</script>

我知道我最终会在组控制器的投票操作中需要组 id,但我不确定缺少 id 是否使路由看起来不存在

 def vote
    @group = Group.find(params[:id])
    ...
4

1 回答 1

2

问题在于这vote_group_path是由 Rails 生成的辅助方法,只能在 Rails 应用程序内部使用。假设您有一个分配给变量id的组。在 Rails 应用程序内部,如果您调用它将返回字符串。该辅助函数不会跨越应用程序层边界进入您的 JavaScript。在 JS 中,您需要手动构建.1some_groupvote_group_path(some_group)'/groups/1/vote''/groups/1/vote'

就像是 :

$.post("/groups/" + this.get('id') + "/vote", {...});
于 2013-09-26T03:05:22.543 回答