【问题标题】:Form_for form in ruby doesn't work when the page loads页面加载时,ruby 中的 Form_for 表单不起作用
【发布时间】:2015-01-08 02:10:19
【问题描述】:

我在一个 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 页面转换,我宁愿不关闭它。 . .谁能建议我在第一次加载页面时让这个表单工作的方法?

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

  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

在我的 todos 控制器中:

  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

我是否必须关闭 turbolinks 并找到一种新的方法来调用我的页面转换,或者是否有其他方法可以使这个表单工作?

谢谢!

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

【问题讨论】:

  • 定义不起作用?你有错误吗?它不提交吗?它不渲染吗?你如何进入页面,你在 jquery 中使用了很多绑定。如果有,你看过吗(github.com/kossnocorp/jquery.turbolinks)
  • 没有错误,只是没有任何反应。没有绑定,没有 jquery,只是对 turbolink 事件 (page:change) 的 FadeIn 效果。
  • 浏览器控制台怎么样?如果不检查控制台上的网络,它至少应该在那里给你一些东西
  • 当我点击“提交”时,浏览器控制台似乎没有注意到。
  • 首先尝试禁用涡轮链接以确保它是罪魁祸首。您可以尝试使用 jquery-turbolinks gem。它解决了很多与 turbo 链接和 javascript 相关的页面加载问题。

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


【解决方案1】:

除了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>

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

【讨论】:

  • 非常感谢!这并没有解决问题,但关闭 divs 总是一个好主意。 . .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多