2012-11-13 38 views
14

Tôi có biểu mẫu đang thêm hàng vào DB qua remote => true. Sau đó tôi muốn chắp thêm dữ liệu mới vào một bảng, nhưng không thể có được khung nhìn chính xác để hiển thị.Hiển thị một phần từ bộ điều khiển trong đường ray

Hiện tại, nó đang hiển thị toàn bộ trang show.html.erb cho mục nhập mới, nhưng tôi muốn bố cục một phiên bản tối thiểu để được thêm dưới dạng. Có cách nào nhanh chóng để nói với bộ điều khiển của tôi những gì xem để render sau khi chèn vào db? Tôi muốn làm một phần tên _newly_added.html.erb tôi

điều khiển của tôi

def new 
    @task = Task.new 
    render :partial => "/tasks/newly_added", :locals => { :t => @task } 
    end 

Cảm ơn !!

EDIT Tôi nghĩ điều tôi cần chỉ là chế độ xem "hiển thị" thay thế.

tôi thấy rằng phương pháp tôi cần phải thay đổi đã thực sự này:

def create 
    @task = Task.new(params[:task]) 

    respond_to do |format| 
     if @task.save 
     format.html { redirect_to @task, notice: 'Task was successfully created.' } 
     format.json { render json: @task, status: :created, location: @task } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Tôi chỉ cần phải thực hiện một cái nhìn chương trình thay thế, và sau đó nói điều này với redirect_to quan điểm đó.

+0

Bạn có thể có một phần chỉ là một hàng 'tr' và hiển thị đối tượng mới trong đó. Sau đó, bạn chỉ có thể nhận được dữ liệu phản hồi của cuộc gọi Ajax của bạn và đặt html được tạo ra trong bảng của bạn. Để sử dụng response_to: js không có bố trí và sử dụng một phần cụ thể – MrYoshiji

Trả lời

11

Được chỉnh sửa theo các thay đổi trong câu hỏi của bạn. Tuy nhiên, không có gì thực sự thay đổi. Bạn đang suy nghĩ về những điều sai trái, và cần phải điều chỉnh cách bạn đang suy nghĩ. Bạn không cần một chương trình thay thế, bạn cần phải xử lý yêu cầu format.js.

Phần phải được hiển thị trong phản hồi JavaScript chứ không phải bộ điều khiển. Bộ điều khiển trông giống như thế này:

def create 
    @task = Task.new(params[:task]) 

    respond_to do |format| 
     if @task.save 
     format.html { redirect_to @task, notice: 'Task was successfully created.' } 
     format.json { render json: @task, status: :created, location: @task } 
     format.js 
     else 
     format.html { render action: "new" } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     format.js 
     end 
    end 
    end 

Sau đó, trong views/nhiệm vụ/create.js.coffee

($ '#mytable').append("<%= j render(partial: 'tasks/newly_added', locals: { t: @task }) %>") 

gì đang xảy ra ở đây là trình duyệt thực hiện cuộc gọi đến create.js. Bộ điều khiển phản hồi với mẫu create.js, vì số format.js của respond_to. j thoát khỏi nội dung của tệp _newly_added.html.erb và nội dung của nó được nối vào bảng. Bộ điều khiển không tương tác với chế độ xem hiện tại, thay vào đó, JavaScript được gửi đến trình duyệt và nó tương tác với chế độ xem. Điều này tất cả thay đổi phần nào nếu bạn đang sử dụng một khuôn khổ MVC phía khách hàng như Backbone hoặc Ember, nhưng bạn đã không chỉ định rằng vì vậy tôi giả sử bạn đang đi với cổ phiếu Rails.

+0

Tôi đã thực hiện một số chỉnh sửa cho câu hỏi ban đầu của mình, tôi nghĩ rằng tôi đã tìm thấy những gì cần phải xảy ra ngay bây giờ, nhưng tôi không thể tìm ra cú pháp. – nathan

+0

Như với mới, do đó, với tạo ra. Không có gì thực sự thay đổi, nhưng tôi đã điều chỉnh câu trả lời cho câu hỏi đã chỉnh sửa của bạn. –

+0

Tôi đã thử rằng trước đó không có ưu thế, nhưng làm lại nó sau khi nhìn thấy bài viết của bạn và nó đã làm các trick. cảm ơn! – nathan

Các vấn đề liên quan