在rails中通过jquery呈现表单

在rails中通过jquery呈现表单,jquery,ruby-on-rails,Jquery,Ruby On Rails,我有一个应用程序,其中我有任务和子任务。每个任务都有一个“添加子任务”按钮,单击该按钮会转到application.html.erb文件中的jquery脚本。然后该脚本会附加一个p标记来保存我的新子任务。现在需要的不是该段落,我希望它显示一个小的子任务创建表单,只包含:name文本字段和一个save按钮,它将执行我的子任务控制器的创建操作 记住,每个子任务都属于一个任务 这就是我现在创建子任务的方式 <% provide(:title,'ToDoProject') %> <%

我有一个应用程序,其中我有任务和子任务。每个任务都有一个“添加子任务”按钮,单击该按钮会转到application.html.erb文件中的jquery脚本。然后该脚本会附加一个p标记来保存我的新子任务。现在需要的不是该段落,我希望它显示一个小的子任务创建表单,只包含:name文本字段和一个save按钮,它将执行我的子任务控制器的创建操作

记住,每个子任务都属于一个任务

这就是我现在创建子任务的方式

<% provide(:title,'ToDoProject') %>
<% flash.each do |key,value| %>
<div class="alert alert-<%=key %>"><%=value %></div>
<%end%>
<h1>Create a subtask</h1>
<div class="container-fluid">
<div class="row-fluid">
<div class="span7">
    <%=form_for [@task,@subtask] do |s| %>

    <%=s.label :name %>
    <%=s.text_field :name,autofocus:'true' %>
    <%=s.submit "Save",class:'btn btn-success'%>
    <%end%>
</div>
</div>
</div>
我想你需要使用


过程

基本上,您正在尝试从Rails服务器加载动态数据

问题是,如果没有中间技术发送数据,就无法从Rails动态加载数据

简单地说,您的客户端是HTML&JS,其中之一需要向Rails服务器发送请求,并在视图中呈现响应


代码

#config/routes.rb
resources :tasks do
    resources :subtasks #creates /tasks/1/subtasks/new etc
end

#app/views/tasks/index.html.erb
<% @tasks.each do |task| %>
    <%= task.name %>
    <%= button_to "New Subtask", new_tasks_subtasks_path(task.id), remote: :true %>
<% end %>

#app/controllers/subtasks_controller.rb
respond_to :html, :js

def new
    @task = params[:task_id]
    @subtask = SubTask.new
end

def create
    @subtask = Subtask.new(subtask_params)
    @subtask.save
end

private
def subtask_params
   params.require(:subtask).permit(:name, :etc)
end

#app/views/subtasks/new.html.erb
<%= form_for [@task,@subtask] do |s| %>
    <%=s.label :name %>
    <%=s.text_field :name,autofocus:'true' %>
    <%=s.submit "Save",class:'btn btn-success'%>
<% end %>

#app/views/subtasks/new.js.erb
$(".parent_div").append("<%=j render "new", layout: false %>")
#config/routes.rb
资源:任务做什么
资源:子任务#创建/任务/1/子任务/新建等
终止
#app/views/tasks/index.html.erb
#应用程序/控制器/子任务\u controller.rb
回复:html,:js
def新
@任务=参数[:任务\u id]
@子任务=子任务。新建
终止
def创建
@子任务=子任务。新建(子任务参数)
@子任务保存
终止
私有的
def子任务参数
参数require(:子任务).permit(:name,:etc)
终止
#app/views/subtask/new.html.erb
#app/views/subtask/new.js.erb
$(“.parent_div”)。追加(“”)

感谢您的回复Rich peck,但我想出了另一种方法,我现在正在做的是隐藏创建子任务的形式,当用户单击“添加子任务”时,使用jquery它的可见性会发生变化。一切都很好。我也可以保存子任务。现在我正在搜索如何在添加新子任务后刷新我的div任务的内容。我想我需要ajax来实现这一点。我只是在谷歌上搜索一下,现在没问题!如果你需要进一步的帮助,请让我知道:)看来ajax已经超出了我的想象。你有任何简单的ajax脚本可以为我工作吗?你需要它做什么?c现在我有了这个add_card按钮,它可以让创建新子任务的表单可见。因此,现在我可以为我的新子任务编写该表单中的任何内容,然后单击save按钮并保存我的子任务。i我只是想让它反映task div中新保存的子任务。我不需要刷新页面,现在我需要刷新,但我不想刷新,我知道这只能通过ajax实现
 $('.addcard > a').click(function(e){

          $('#subtask_form_' + $(this).data('id')).show(1000);

e.preventDefault();
   });

          $('.subtaskform a').click(function(e){
           $('#subtask_form_' + $(this).data('id')).hide(1000);
          e.preventDefault();
         });
#config/routes.rb
resources :tasks do
    resources :subtasks #creates /tasks/1/subtasks/new etc
end

#app/views/tasks/index.html.erb
<% @tasks.each do |task| %>
    <%= task.name %>
    <%= button_to "New Subtask", new_tasks_subtasks_path(task.id), remote: :true %>
<% end %>

#app/controllers/subtasks_controller.rb
respond_to :html, :js

def new
    @task = params[:task_id]
    @subtask = SubTask.new
end

def create
    @subtask = Subtask.new(subtask_params)
    @subtask.save
end

private
def subtask_params
   params.require(:subtask).permit(:name, :etc)
end

#app/views/subtasks/new.html.erb
<%= form_for [@task,@subtask] do |s| %>
    <%=s.label :name %>
    <%=s.text_field :name,autofocus:'true' %>
    <%=s.submit "Save",class:'btn btn-success'%>
<% end %>

#app/views/subtasks/new.js.erb
$(".parent_div").append("<%=j render "new", layout: false %>")