在表单提交后使用ajax在rails中呈现内容

时间:2014-12-17 07:40:46

标签: javascript ruby-on-rails ruby ajax

我知道这个问题已被问过几次,但我遇到了麻烦。

我正在创建一个简单的刽子手游戏,我创建了一个键盘,所以有26个表单看起来像这样:

            <%= form_for @puzzle, :remote => true, :html => {:class => 'keyq'} do |f|%>
            <%= f.hidden_field :letters_guessed, value: "Q" %>
            <% end %>

我将字母存储在数组类型db field :letters_guessed

然后我用它来循环查看用户是否猜到了这封信。

<div class="mystery">
            <% @puzzle.word.length.times do |digit| %>
                <% letter = @puzzle.word[digit] %>
                <% if @puzzle.word[digit] == " " %>
                <br>
                <% elsif @puzzle.letters_guessed.include?(letter.upcase)%>
                    <%= letter %>
                <% else %>
                    <%= "_" %>
                <% end %>
            <% end %>
</div>

基本上,我需要用新数组更新神秘div。截至目前,当我提交表格时,没有任何反应(我想是可以预料的)。

这是我的控制器动作

    def update
      @puzzle.letters_guessed = @puzzle.letters_guessed + [params[:puzzle][:letters_guessed]]
      @puzzle.save
      respond_to do |format|
        format.html
        format.js
    end

这里的想法是我创建一个新数组,然后保存它。我现在不知道如何处理渲染。

我在与其他视图相同的目录中创建了一个_puzzle.js文件...如何在不实际刷新页面的情况下将新数组恢复到我的视图?

2 个答案:

答案 0 :(得分:1)

尝试在app / views / YOUR_MODEL /中创建update.js.erb并简单地设置警报(“Goes here”);

这将是一个很好的开始。

答案 1 :(得分:0)

好吧,正如您在问题中已经说明的那样,您需要使用AJAX提交表单,然后在成功回调时,您将获得 _puzzle.js.erb 文件的内容。之后您需要做的是修改您的DOM。这是jQuery最简单的完成。 jQuery还具有很好的AJAX功能,您可以使用它来执行AJAX请求。另请阅读this,因为它会向您显示提交表单的示例。

祝你好运!