使用AJAX渲染index.js.erb文件是否合适?

时间:2014-05-25 16:45:24

标签: javascript ruby-on-rails ajax

我对使用AJAX呈现页面的适当性感到有点困惑。首先,我将解释我正在尝试做什么,然后解释我的逻辑。

我有一个任务列表rails app我正在制作。创建任务后,我希望创建的任务在索引页面上显示基于其优先级的颜色代码。 High的任务为红色,Medium的任务为橙色,Low为绿色。要做到这一点,我知道我需要jQuery来添加.css或addClass方法,但我很困惑如何做到这一点。在上一个问题中,用户微薄告诉我,我需要将控制器中的信息提供给我的priority.js.erb文件,其中包括:

  $(document).ready(function(){
    if (<% @task.importance == "Low" %>) {
      $("td").addClass("green");
    } else if(<% @task.importance == "Medium" %>) {
      $("td").addClass("orange");
    } else {
      $("td").addClass("red");
    }
  });

我知道控制器需要提供它,因为我的priority.js.erb文件因为@task不存在而中断。但这是我没有得到的东西。我如何实现这一点以及我需要哪些文件。我知道AJAX通常用于不需要页面刷新的功能,例如在博客上评论等等,但我想要的东西需要页面刷新。我需要有人点击new.html.erb,创建一个转到我的控制器的任务,做这样的事情:

def create
@task = Task.new(task_params)
respond_to do |format|
    format.html do
      redirect_to tasks_path, notice: "Task created!"
    end

    format.json do
      render json: @task
    end
  end
end

然后刷新index.html页面。我需要一个单独的index.js.erb文件吗?

或者我使用AJAX完全错误?我甚至需要使用它吗?我只是非常困惑,因为我不确定需要做什么。如果你们需要详细说明或提供更多信息,请告诉我,我会编辑问题。我真的想让这个功能发挥作用。 THX。

1 个答案:

答案 0 :(得分:2)

你不需要任何AJAX就可以了。正如您在上面的评论中提到的,您的new表单将任务信息发布到TasksController内的create方法。

在TasksController create方法中:

def create
  @task = Task.new(task_params)
  if @task.save
    respond_to do |format|
        format.html do
          redirect_to tasks_path, notice: "Task created!"
        end
        # you probably don't need this, at this time (but it doesn't hurt)
        format.json do 
          render json: @task
        end
    end
  end
end

请务必使用@task.save保存任务,因为原始帖子中的控制器代码中缺少该任务。

然后,在您的TasksController index视图(app/views/tasks/index.html.hamlapp/views/tasks/index.html.erb)中,您可以执行以下操作(使用HAML作为我的视图语言):

- @tasks.each do |task|
  - case task.importance.titleize
  - when 'Low'
    %tr.green
  - when 'High'
    %tr.red
  # the above assumes you want to apply a background color to an entire table row
    %td= task.name (etc.)

在某些样式表中:

.green { background-color: #SOMEHEX; }
.red { background-color: #SOMEOTHERHEX; }

当您的索引页面呈现,显示所有请求的任务时,您的HAML或ERB索引视图将根据每个任务的重要性属性在您的表行上输出一个类。通过在样式表中定义类,表中的行将以正确的颜色显示。

由于您在Web应用程序中使用基本的请求 - 响应方法,因此您不需要需要 AJAX。

希望有助于您前进!