Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何呈现包含编辑函数的表单_的部分?_Javascript_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 如何呈现包含编辑函数的表单_的部分?

Javascript 如何呈现包含编辑函数的表单_的部分?,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我在父视图中有一个div,它呈现show部分。在这个showpartial中,我有一个按钮,可以更改父对象的partial,以呈现“form”partial来编辑对象,但我一直被卡住,因为的“form”partial的form\u似乎缺少@project对象 如何将此对象传递给“表单”分部?我还缺什么吗 我对使用AJAX相当陌生。如果您需要,欢迎提供更多信息 我在服务器终端中遇到的错误是 ActionView::Template::Error (First argument in form ca

我在父视图中有一个
div
,它呈现
show
部分。在这个
show
partial中,我有一个按钮,可以更改父对象的partial,以呈现“form”partial来编辑对象,但我一直被卡住,因为
的“form”partial的
form\u似乎缺少
@project
对象

如何将此对象传递给“表单”分部?我还缺什么吗

我对使用AJAX相当陌生。如果您需要,欢迎提供更多信息

我在服务器终端中遇到的错误是

ActionView::Template::Error (First argument in form cannot contain nil or be empty):
routes.rb

    get 'switchProjectView', to: 'projects#switch_main_view'
    resources :projects
class ProjectsController < ApplicationController

  def new
    @project = Project.new
  end

  def create
    @project = Project.new(project_params)
    if @project.save
      flash[:success] = "New Project Added"
      redirect_to @project 
    else
      flash[:danger] = "Project Not Added. Please Try Again"
    end

  end

  def show
    @project = Project.find(params[:id])
  end

  def index
    @projects = Project.all
  end

  def update 
    @project = Project.find(params[:id])
    if @project.update_attributes(project_params)
      redirect_to @project
    else
      render 'edit'
    end
  end

  def edit

  end

  def switch_main_view
    respond_to do |format|               
      format.html
      format.js
    end    
  end     


  def project_params
    params.require(:project).permit(:main_contact_name, :id, :main_contact_phone, :main_contact_email, :project_name)
  end

end
    <div class="body">
      <div class="center jumbotron heading-jumbo">
        <h1><%= @project.project_name %></h1>  
      </div>

      <div class="body-jumbo jumbotron" id='project-details'>
        <%= render "projects/show" %>
      </div>
    </div>
    $('#project-details').html("<%= j render :partial => 'projects/form' %>");
<div class='text-center center'>
    <h3><strong>Project Information</strong></h2>  
</div>
<h2>Start Date: Launch Date:</h1>
<span class='pull-right jumbo-btn-span'><%= link_to "Edit Project Information", switchProjectView_path(@project), remote: true, class:'btn btn-primary jumbo-btn' %></span>
<h2>Primary Conact's Name:  <%= @project.main_contact_name %></h2>
<h2>Primary Conact's Phone: <%= @project.main_contact_phone %></h2>
<h2>Primary Conact's Email: <%= @project.main_contact_email %></h2>
projects\u controller.rb

    get 'switchProjectView', to: 'projects#switch_main_view'
    resources :projects
class ProjectsController < ApplicationController

  def new
    @project = Project.new
  end

  def create
    @project = Project.new(project_params)
    if @project.save
      flash[:success] = "New Project Added"
      redirect_to @project 
    else
      flash[:danger] = "Project Not Added. Please Try Again"
    end

  end

  def show
    @project = Project.find(params[:id])
  end

  def index
    @projects = Project.all
  end

  def update 
    @project = Project.find(params[:id])
    if @project.update_attributes(project_params)
      redirect_to @project
    else
      render 'edit'
    end
  end

  def edit

  end

  def switch_main_view
    respond_to do |format|               
      format.html
      format.js
    end    
  end     


  def project_params
    params.require(:project).permit(:main_contact_name, :id, :main_contact_phone, :main_contact_email, :project_name)
  end

end
    <div class="body">
      <div class="center jumbotron heading-jumbo">
        <h1><%= @project.project_name %></h1>  
      </div>

      <div class="body-jumbo jumbotron" id='project-details'>
        <%= render "projects/show" %>
      </div>
    </div>
    $('#project-details').html("<%= j render :partial => 'projects/form' %>");
<div class='text-center center'>
    <h3><strong>Project Information</strong></h2>  
</div>
<h2>Start Date: Launch Date:</h1>
<span class='pull-right jumbo-btn-span'><%= link_to "Edit Project Information", switchProjectView_path(@project), remote: true, class:'btn btn-primary jumbo-btn' %></span>
<h2>Primary Conact's Name:  <%= @project.main_contact_name %></h2>
<h2>Primary Conact's Phone: <%= @project.main_contact_phone %></h2>
<h2>Primary Conact's Email: <%= @project.main_contact_email %></h2>
class ProjectsController
show.html.erb

    get 'switchProjectView', to: 'projects#switch_main_view'
    resources :projects
class ProjectsController < ApplicationController

  def new
    @project = Project.new
  end

  def create
    @project = Project.new(project_params)
    if @project.save
      flash[:success] = "New Project Added"
      redirect_to @project 
    else
      flash[:danger] = "Project Not Added. Please Try Again"
    end

  end

  def show
    @project = Project.find(params[:id])
  end

  def index
    @projects = Project.all
  end

  def update 
    @project = Project.find(params[:id])
    if @project.update_attributes(project_params)
      redirect_to @project
    else
      render 'edit'
    end
  end

  def edit

  end

  def switch_main_view
    respond_to do |format|               
      format.html
      format.js
    end    
  end     


  def project_params
    params.require(:project).permit(:main_contact_name, :id, :main_contact_phone, :main_contact_email, :project_name)
  end

end
    <div class="body">
      <div class="center jumbotron heading-jumbo">
        <h1><%= @project.project_name %></h1>  
      </div>

      <div class="body-jumbo jumbotron" id='project-details'>
        <%= render "projects/show" %>
      </div>
    </div>
    $('#project-details').html("<%= j render :partial => 'projects/form' %>");
<div class='text-center center'>
    <h3><strong>Project Information</strong></h2>  
</div>
<h2>Start Date: Launch Date:</h1>
<span class='pull-right jumbo-btn-span'><%= link_to "Edit Project Information", switchProjectView_path(@project), remote: true, class:'btn btn-primary jumbo-btn' %></span>
<h2>Primary Conact's Name:  <%= @project.main_contact_name %></h2>
<h2>Primary Conact's Phone: <%= @project.main_contact_phone %></h2>
<h2>Primary Conact's Email: <%= @project.main_contact_email %></h2>

切换\u main\u view.js.erb

    get 'switchProjectView', to: 'projects#switch_main_view'
    resources :projects
class ProjectsController < ApplicationController

  def new
    @project = Project.new
  end

  def create
    @project = Project.new(project_params)
    if @project.save
      flash[:success] = "New Project Added"
      redirect_to @project 
    else
      flash[:danger] = "Project Not Added. Please Try Again"
    end

  end

  def show
    @project = Project.find(params[:id])
  end

  def index
    @projects = Project.all
  end

  def update 
    @project = Project.find(params[:id])
    if @project.update_attributes(project_params)
      redirect_to @project
    else
      render 'edit'
    end
  end

  def edit

  end

  def switch_main_view
    respond_to do |format|               
      format.html
      format.js
    end    
  end     


  def project_params
    params.require(:project).permit(:main_contact_name, :id, :main_contact_phone, :main_contact_email, :project_name)
  end

end
    <div class="body">
      <div class="center jumbotron heading-jumbo">
        <h1><%= @project.project_name %></h1>  
      </div>

      <div class="body-jumbo jumbotron" id='project-details'>
        <%= render "projects/show" %>
      </div>
    </div>
    $('#project-details').html("<%= j render :partial => 'projects/form' %>");
<div class='text-center center'>
    <h3><strong>Project Information</strong></h2>  
</div>
<h2>Start Date: Launch Date:</h1>
<span class='pull-right jumbo-btn-span'><%= link_to "Edit Project Information", switchProjectView_path(@project), remote: true, class:'btn btn-primary jumbo-btn' %></span>
<h2>Primary Conact's Name:  <%= @project.main_contact_name %></h2>
<h2>Primary Conact's Phone: <%= @project.main_contact_phone %></h2>
<h2>Primary Conact's Email: <%= @project.main_contact_email %></h2>
$(“#项目详细信息”).html(“'projects/form“%”);
\u form.html.erb


\u show.html.erb

    get 'switchProjectView', to: 'projects#switch_main_view'
    resources :projects
class ProjectsController < ApplicationController

  def new
    @project = Project.new
  end

  def create
    @project = Project.new(project_params)
    if @project.save
      flash[:success] = "New Project Added"
      redirect_to @project 
    else
      flash[:danger] = "Project Not Added. Please Try Again"
    end

  end

  def show
    @project = Project.find(params[:id])
  end

  def index
    @projects = Project.all
  end

  def update 
    @project = Project.find(params[:id])
    if @project.update_attributes(project_params)
      redirect_to @project
    else
      render 'edit'
    end
  end

  def edit

  end

  def switch_main_view
    respond_to do |format|               
      format.html
      format.js
    end    
  end     


  def project_params
    params.require(:project).permit(:main_contact_name, :id, :main_contact_phone, :main_contact_email, :project_name)
  end

end
    <div class="body">
      <div class="center jumbotron heading-jumbo">
        <h1><%= @project.project_name %></h1>  
      </div>

      <div class="body-jumbo jumbotron" id='project-details'>
        <%= render "projects/show" %>
      </div>
    </div>
    $('#project-details').html("<%= j render :partial => 'projects/form' %>");
<div class='text-center center'>
    <h3><strong>Project Information</strong></h2>  
</div>
<h2>Start Date: Launch Date:</h1>
<span class='pull-right jumbo-btn-span'><%= link_to "Edit Project Information", switchProjectView_path(@project), remote: true, class:'btn btn-primary jumbo-btn' %></span>
<h2>Primary Conact's Name:  <%= @project.main_contact_name %></h2>
<h2>Primary Conact's Phone: <%= @project.main_contact_phone %></h2>
<h2>Primary Conact's Email: <%= @project.main_contact_email %></h2>

项目信息
开始日期:发布日期:
主要公司名称:
主Conact的电话:
Primary Conact的电子邮件:

调用分部函数时尝试传递变量:

$('#project-details').html("<%= j render :partial => 'projects/form', locals: {project: @project} %>");
$(“#项目详细信息”).html(“'projects/form',局部变量:{project:@project}%>”;

调用分部函数时尝试传递变量:

$('#project-details').html("<%= j render :partial => 'projects/form', locals: {project: @project} %>");
$(“#项目详细信息”).html(“'projects/form',局部变量:{project:@project}%>”;

好的,对于每个请求,您都需要重新初始化控制器方法中的变量。在您的情况下,您需要执行以下操作:

def switch_main_view
  @project = Project.new
  respond_to do |format|               
    format.html
    format.js
  end    
end
这样做将使您能够消除错误:表单中的第一个参数不能包含nil或为空,但这不会使您能够执行实际尝试执行的操作

当您使用
link\u to
时,默认情况下,它用于HTML请求,正如您在Rails日志中看到的那样,将出现如下内容:

Processing by ProjectsController#switch_main_view as HTML
为了获得JS响应,您需要告诉
link\u to
您准备的是JS响应,而不是HTML响应,您可以通过在
link\u to
中传递
format::JS
来实现:

<%= link_to "Edit Project Information", switchProjectView_path(@project, format: :js), remote: true, class:'btn btn-primary jumbo-btn' %></span>


remote:true
将确保您没有重新加载页面内容,而是试图在后台从服务器获取内容。

好的,对于每个请求,您需要在控制器方法中重新初始化变量。在您的情况下,您需要执行以下操作:

def switch_main_view
  @project = Project.new
  respond_to do |format|               
    format.html
    format.js
  end    
end
这样做将使您能够消除错误:表单中的第一个参数不能包含nil或为空,但这不会使您能够执行实际尝试执行的操作

当您使用
link\u to
时,默认情况下,它用于HTML请求,正如您在Rails日志中看到的那样,将出现如下内容:

Processing by ProjectsController#switch_main_view as HTML
为了获得JS响应,您需要告诉
link\u to
您准备的是JS响应,而不是HTML响应,您可以通过在
link\u to
中传递
format::JS
来实现:

<%= link_to "Edit Project Information", switchProjectView_path(@project, format: :js), remote: true, class:'btn btn-primary jumbo-btn' %></span>

remote:true
将确保您没有重新加载页面内容,而是试图在后台从服务器获取内容。

您的请求“switchProjectView\u path(@project)”只向服务器发送对象id,因此您需要加载对象以将其显示在视图中以供响应。
1.首先,路由应如下所示,以便url可以包含对象id:
get'switchProjectView/:id',to'projects#switch#u main_view',as:“switchProjectView”

2.您必须在控制器中加载对象:

def开关主视图
@project=project.find(参数[:id])
回应待办事项|格式|
format.html
format.js
结束
结束

您的请求“switchProjectView\u path(@project)”只向服务器发送对象id,因此您需要加载对象以在视图中显示它以供响应。
1.首先,路由应如下所示,以便url可以包含对象id:
get'switchProjectView/:id',to'projects#switch#u main_view',as:“switchProjectView”

2.您必须在控制器中加载对象:

def开关主视图
@project=project.find(参数[:id])
回应待办事项|格式|
format.html
format.js
结束
结束

您是否在主视图的控制器中声明了@project?是的,我声明了。父级show.html.erb上的project/show partial正确地显示了@project数据问题在于ruby变量随页面呈现,并且在添加partial时浏览器不会调用它。如果已经声明了,您是否考虑过只隐藏div,但将其与页面一起加载,然后在需要时显示它,而不是稍后添加html?这很有意义,而且这当然是一个选项。有没有办法通过js文件将变量传递给partial