2012-01-08 21 views
16

Tôi có biểu mẫu 'mới' được xác thực trong mô hình bài đăng. Khi trình xác thực khởi động, trình xác thực sẽ hiển thị không chính xác.hiển thị: mới sẽ không đúng vị trí sau khi xác thực

Con đường bưu trang mới là '/ bài viết/mới'

On xác nhận, con đường bưu trang mới là '/ bài viết' .. Tôi cần nó để quay trở lại '/ bài viết/mới' .

Đây là bộ điều khiển của tôi:

def create 
@post = current_user.posts.build(params[:post]) 
if @post.save 
    redirect_to public_post_page_path(@post.public_url) 
else 
    render :action => :new 
end 
end 

Tôi có một cảm giác nó có thể có để làm với hình thức của tôi. Vì vậy, đây là dòng đầu tiên của formtastic:

<%= semantic_form_for [:student, post], :html => {:id => "post_form"} do |form| %> 

Trả lời

11

Đây là hành vi chính xác từ đường ray.

Trong hành động tạo, nó chỉ đơn giản là hiển thị tệp xem "mới". Vì vậy, url sẽ là/bài đăng nhưng chế độ xem sẽ hiển thị chính xác biểu mẫu. Không có gì sai với hành vi này; và trong quy ước đường ray chung là hình thức tốt. Ngoài ra việc xây dựng trong các lỗi rails làm việc nếu bạn chỉ cần render mới; tuy nhiên nếu bạn chuyển hướng, chúng sẽ không hiển thị.

Nếu bạn thực sự cảm thấy như bạn muốn quay trở lại để url mà bạn cần phải sử dụng:

redirect_to 

thay vì render.

+1

Tôi muốn hiển thị lỗi, vì vậy nó cần được hiển thị. Lý do tôi cần nó để quay lại/posts/new là một chút phức tạp. Nhưng về cơ bản, trong bộ điều khiển cho 'def new', tôi kiểm tra xác thực twitter cho người dùng để xác định có hay không hiển thị các phần của biểu mẫu. Khi nó đi đến '/ posts', tôi mất xác nhận này. Tôi đoán câu hỏi là, có cách nào để tải lại mã trong bộ điều khiển 'mới' sau khi kết xuất không? – Marc

+3

Tạo một phương pháp điều khiển riêng để thiết lập cho mới, gọi nó từ mới và từ tạo trước khi nó render mới – house9

+0

@Marc Rails, theo quy ước, hãy thực hiện một 'POST' tới/bài viết để tạo. Bạn luôn có thể vi phạm quy ước này bằng cách đăng lên/bài đăng/mới. –

0

Nếu xác thực không thành công, người dùng sẽ thấy biểu mẫu có lỗi và giữ nguyên tại /posts/new. Đó là những gì bạn muốn, phải không?

Có một cách đơn giản để đạt được điều này.

Đặt remote: true trên biểu mẫu để ngăn url chuyển tiếp. Xử lý ajax:success để thay thế biểu mẫu trên trang bằng hình mới được hiển thị.

$('form[data-remote=true]').on 'ajax:success', (e, data, status, xhr) -> 
    if isHTML(data) 
    thisForm = "form[id=#{@getAttribute('id')}]" 
    $(thisForm).replaceWith $(data).find(thisForm) 

isHtml() là từ this question.

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