【发布时间】: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