2012-06-21 40 views
5

我是Rails的初學者程序員,我目前正在嘗試創建一個簡單的表單,它需要一個名稱,電子郵件和電話號碼,然後當您單擊提交時更新頁面與你使用Ajax輸入的信息一致。使用Ajax在Rails中更新部分

也就是說,如果你輸入的用戶,[email protected],並555-555-555到窗體的文本字段,然後點擊提交,你應該得到

名稱:用戶 郵箱:用戶名@例子。 com 電話號碼:555-555-555

我知道這是一個簡單的問題,但我不太清楚如何編寫JavaScript以使其工作。

這裏是我的部分代碼:

<%= form_for(@user, :remote => true) do |f| %> 

Name: <div="Name"><%= f.text_field :name %></div> 
Email: <div="Email"><%= f.text_field :email %></div><br/> 
Phone Number: <div="Phone Number"><%= f.text_field :phone_number%></div><br/> 
<%= f.submit "Submit" %> 

我的控制器看起來是這樣的:

class UsersController < ApplicationController 

def new 
    @user = User.new 
end 

def create 
    @user = User.new(params[:user]) 
end 
end 

在我create.js.erb文件做我使用.update功能,以取代輸入信息的文本字段還是我做其他事?在create.js.erb文件

<div id="theform"> 
<%= form_for(@user, :remote => true) do |f| %> 

Name: <div="Name"><%= f.text_field :name %></div> 
Email: <div="Email"><%= f.text_field :email %></div><br/> 
Phone Number: <div="Phone Number"><%= f.text_field :phone_number%></div><br/> 
<%= f.submit "Submit" %> 
</div> 

然後:

回答

10

如果您的包裹形式,一個div,你可以很容易地更換後的內容

$("#theform").html("<%= escape_javascript(render partial: "users/user", locals: {user: @user}) %>"); 

而在你的/應用/views/users/_user.html.erb

Name: <%= user.name%> Email: <%= user.email%> Phone Number: <%= user.phone%> 
+0

非常感謝 - 工作!我將不得不閱讀更多有關在Rails中使用Ajax的問題​​,但再次感謝! :) – tkrishnan

1

你到了你的表格上的遠程真實,讓你的控制器來響應一個js

查看:

<%= form_for(@user, :remote => true) do |f| %> 
    Name: <div="Name"><%= f.text_field :name %></div> 
    Email: <div="Email"><%= f.text_field :email %></div><br/> 
    Phone Number: <div="Phone Number"><%= f.text_field :phone_number%></div><br/> 
<%= f.submit "Submit" %> 

控制器:

class UsersController < ApplicationController 

    def create 
    @user = User.new(params[:user]) 
    @user.save 
    respond_to do |format| 
     flash[:notice] = "saved successful" 
     format.js # new.js.erb 
    end 
    end 
end 

,並創建一個新的文件名爲new.js.erb與AJAX代碼,並使用紅寶石嵌入sintax請你

$('div#my_id').html('<%= @user.name%> - <%= @user.phone %>'); 
$('div#notice').html('<%= flash[:notice] %>');