在手动重新加载页面之前,无法销毁模型

时间:2015-09-11 18:59:30

标签: ruby voltrb

我正在尝试做类似于故事名称而不是待办事项的待办事项列表。

型号代码:

class Story < Volt::Model
  validate :name, length: 5

end

控制器代码:

module Main
  class MainController < Volt::ModelController
    model :store

    def index
    end

    def add_story
      new_story = Story.new(name: page._name)
      _stories << new_story
      page._name = ""
    end

    ...
  end
end

查看代码:

<:Title>
  Home

<:Body>
  <h1>Home</h1>

  <form e-submit="add_story" role="form">
    <div class="form-group">
      <label>Todo</label>
      <input class="form-control" type="text" value="{{ page._name }}" />
    </div>
  </form>

  {{ _stories.each do |story| }}
    <p>{{ story._name}}</p>
    <button e-click="story.destroy">X</button>
  {{ end }}

当我添加故事名称并尝试单击删除按钮时,我收到以下错误:

Uncaught NoMethodError: undefined method `to_sym' for #<Story id: "94f1..fc0f", name: "Test">

错误的堆栈跟踪:

(anonymous function)  @ app.js:3607
Opal.defn.TMP_1 @ app.js:2486
Opal.defn.TMP_2 @ app.js:20321
def.$method_missing.TMP_8 @ app.js:21386
method_missing_stub @ app.js:722
(anonymous function)  @ app.js:18726
def.$destroy  @ app.js:21518
def.$call.TMP_1 @ app.js:13114
(anonymous function)  @ app.js:26485
$a.$$p.TMP_2  @ app.js:26475
Opal.yieldX @ app.js:850
def.$call.TMP_2 @ app.js:13044
$a.$$p.TMP_3  @ app.js:26634
Opal.yield1 @ app.js:830
def.$each.TMP_9 @ app.js:7253
$a.$$p.TMP_2  @ app.js:26634
Opal.defn.TMP_6 @ app.js:3497
def.$handle @ app.js:26639
$a.$$p.TMP_1  @ app.js:26610
jQuery.event.dispatch @ jquery-2.0.3.js:4677
elemData.handle @ jquery-2.0.3.js:4361

我重新加载页面后,或者即使我同时打开另一个窗口,我也可以删除该故事。因此#destroy方法在我重新加载之前不会对Story模型起作用,但我不明白为什么以及如何解决它。

1 个答案:

答案 0 :(得分:1)

好的,这个问题在我的最后。如果你跑掉了主人,现在应该可以了。

gem 'volt', github: 'voltrb/volt'