当页面加载时,ruby中的Form_for表单不起作用

时间:2015-01-08 02:10:20

标签: ruby-on-rails form-for turbolinks

我在ruby应用中有一个表单在页面加载时不起作用;当我点击"刷新,"然后它运作得很好:

         <div class="newtodoline">  
          <div class="description text_field">
            <%= form_for @todo do |form| %>
              <%= form.text_field :description, placeholder: 'Add new todo', size: 25 %></div>
          <div class="days_old">
              <%= form.hidden_field :list_id, :value => @list.id %></div>
          <div class="completed savetodo">
              <%= form.submit 'Save Todo' %></div>
            <% end %>

我想问题就在于turbolinks,但是当我使用turbolinks事件激发javascript页面转换时,我宁愿不关闭它。 。 。任何人都可以建议一种方法,我可以在第一次加载页面时使用此表单吗?

我的控制器中可能也有问题,但是当我刷新页面时,表单仍然有效,所以我不认为这是问题所在。 。 。无论如何,这个表单创建了一个新的待办事项,它需要来自todos控制器的创建动作;但表单本身就在列表显示视图中。所以,在我的名单控制器中,我有:

  def show
    @list = List.find(params[:id])
    @cutoff = @list.cutoff
    if @list.todos.exists? then  
      @list.todos.each do |t|
        if t.age_of_todo > @cutoff then
          t.delete
        end
      end
    end
    @todos = @list.todos
    @todo = Todo.new
  end

在我的待办事项控制器中:

  def create
    @todo = Todo.new(todo_params)
    if @todo.valid?
      @todo.save
      redirect_to list_path(id:@todo.list_id), notice: 'Your new TODO was saved!'
    else
      flash[:notice] = 'You forgot to enter a description. Please try again.'
      redirect_to :back
    end
  end

  private

  def todo_params
    params.require(:todo).permit(:description, :list_id)
  end

我是否必须关闭turbolink并找到一种新的方式来调用我的页面转换,还是有另一种方法可以使这个表单有效?

谢谢!

编辑:我应该提一下,我已经尝试过关闭turbolinks,它确实解决了这个问题;不幸的是,然后我的漂亮页面转换也关闭了,我不知道如何将这些转换附加到html页面更改事件。我很想知道turbolinks是如何失败这种特殊形式的,以及如何在使用turbolinks的同时修复它!有谁知道form_for帮助器本身的代码在哪里?

1 个答案:

答案 0 :(得分:0)

除了打开和关闭HTML标记的顺序之外,我找不到任何问题,是的,我发现您错过了关闭div标记。请使用以下代码:

<div class="newtodoline">
  <%= form_for @todo do |form| %>
    <div class="description text_field">
      <%= form.text_field :description, placeholder: 'Add new todo', size: 25 %>
    </div>
    <div class="days_old">
      <%= form.hidden_field :list_id, :value => @list.id %>
    </div>
    <div class="completed savetodo">
      <%= form.submit 'Save Todo' %>
    </div>
  <% end %>
</div>

我不太确定这个问题,但它可能对你有帮助:)。