4

我已经按照这个Railscast通过 Ajax 提交表单并更新 div 而不重新加载页面,但是我在其中的一部分遇到了问题。

提交表单时,Ryan$("#products").html("<%= escape_javascript(render(@products)) %>");在一个index.js.erb文件中更新了div。#products我正在努力理解类似的实例变量@products是否与我的情况相关,或者我是否可以简单地将其替换为 URL。

我正在尝试在此截屏视频中与 Ryan 做同样的事情,但我不想显示搜索结果,而是只想显示更新后的值。

在 show.html.erb 我有:

<% @project.project_todos.order("created_at DESC").where(:status => false).each do |todo|%>

<%= form_for todo, :remote => true, :"data-replace" => "#dueon" do |f| %>
   <%= f.text_field :due %>
   <%= f.submit :class => "primary", :value => "Add" %>
<% end %>

<div id="dueon">
   <%= render "duedate", :todo => todo %>
</div>

<% end %>

部分_duedate.html.erb中有一行:<%= todo.due %>

所以在我的 index.js.erb 我目前有这个:$("#dueon").html("<%= escape_javascript(render("_duedate")) %>");但它显然不起作用。我必须在此处使用变量代替_duedate吗?如果是这样,我将如何在控制器中进行设置?我的意思是变量代表什么?

此外,对于它的价值,部分正在正确呈现并显示todo.due值......当我提交表单时它只是没有更新。

项目控制器:

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

    # Display the form to create a new todo
    @project_todo = ProjectTodo.new

    respond_to do |format|
      format.html # show.html.erb
      format.json { render :json => @project }
    end
  end
4

2 回答 2

5

试试这个

在你的控制器动作中,(比如 sample_action)

def sample_action
   @todos = #your code

   respond_to do |format|
      format.js
   end
end

你有一个sample_action.js.erb

$("#dueon").html("<%= raw escape_javascript(render(:partial => 'duedate')) %>")

然后在部分内部,您可以访问新的@todos实例变量

高温高压

于 2012-12-17T06:43:13.453 回答
0

我会单独回答你,因为我相信你的整个设置应该没什么变化(IMO,这可能不是这种情况)

我认为你应该有一个属于它的项目的 todos 控制器,

- - 楷模 - - - - - - - -

class Project < ActiveRecord::Base
  has_many :todos
end

class Todo < ActiveRecord::Base
   belongs_to :project
end

---- 路线 ---------------

resources :projects do
  resources :todos do
  end
end

---- 控制器 ----------

类项目控制器 < 应用控制器

结尾

class TodosController < ApplicationController

   def new
      @project = Project.find(params[:project_id])
      @todos = @project.todos.build
   end
end

在你看来 (views/todos.html.erb)

<%= @project.name %>
<%= form_for([@Project, @todos]) do |f| %>
  #todo form code
<% end%>

根据关系,项目有很多待办事项,在待办事项添加屏幕中显示项目详细信息总是很清楚,而不是允许用户从项目屏幕添加新的待办事项。

再说一次,这是我个人的看法,有任何问题欢迎提问:)

于 2012-12-17T07:42:28.077 回答