2010-05-07 34 views
5

Nếu tôi đang ở trên bí danh tuyến đường như/đăng ký và tôi có lỗi biểu mẫu và tôi hiển thị: mới, có thể cho đường dẫn/đăng ký không?chuyển hướng đến bí danh tuyến đường trên lỗi xác thực biểu mẫu

Tại thời điểm hiển thị/mới

Tôi có thể thực hiện chuyển hướng_to register_path nhưng sau đó tôi sẽ mất thông số?

Nó làm cho thử nghiệm sau thất bại:

Scenario: Try registering with a bad staff number 
Given I am on the registration page 
When I fill in "email" with "[email protected]" 
And I fill in "First Name" with "Kevin" 
And I fill in "last name" with "Monk" 
And I fill in "Employee Number" with "something barking123" 
And I press "Register" 
Then I should be on the registration page 
And I should see "Your employee ID number looks incorrect." 
+1

Tôi hỏi một tương tự và có câu trả lời, xem http: // stackoverflow.com/questions/1083798/use-custom-route-upon-model-validation-failure –

+0

Vì tình yêu của Jobs, hãy sửa ngữ pháp trong câu cuối cùng. Bạn không muốn trang web của mình xuất hiện trên Error'd. "Số ID nhân viên của bạn có vẻ không chính xác". – mcandre

+0

Oh yea! điểm tốt. Quyền của bạn! –

Trả lời

1

Cách khác là thiết lập hai tuyến đường "đăng ký". Một chỉ chấp nhận các yêu cầu GET (và đi đến: hành động mới) và phương thức khác chỉ chấp nhận các yêu cầu POST (và đi tới hành động tạo, nhưng hiển thị cùng một khuôn mẫu cho mới).

này có thể trông giống như:

map.get_register 'register', :controller => :registrations, 
       :action => :new, :conditions => { :method => :get } 
map.post_register 'register', :controller => :registrations, 
       :action => :create, :conditions => { :method => :post } 

Sau đó, trong điều khiển của bạn:

def new 
    @registration = Registration.new 
    # renders the 'registrations/new' template 
end 
def create 
    @registration = Registration.new(params[:registration]) 

    # render the 'registrations/new' template if we fail validation 
    return render(:action => :new) unless @registration.save 
    # otherwise renders the "create" template which is likely a thank-you 
end 

Dường như có nhiều trong một tĩnh mạch tương tự về vấn đề này: Use custom route upon model validation failure

+0

Hi Taryn, Đó chính là điều tôi đã làm cuối cùng. Cảm ơn câu trả lời của bạn. Kevin. –

1

The Way Rails là để render "mới" (ví dụ: đăng ký) hành động một lần nữa, kể từ khi bạn đã tạo ra các đối tượng, hình thức sẽ chứa các giá trị đã nhập trước đó cũng như thông báo lỗi. Nếu bạn chuyển hướng, bạn sẽ phải lưu đối tượng trong phiên hoặc cơ sở dữ liệu trước khi thực hiện chuyển hướng. Khi phân kỳ theo quy ước, bạn nên chắc chắn rằng mình đang làm như vậy vì một lý do chính đáng.

1

Gọi điện hiển thị từ một hành động sẽ có nghĩa là URL sẽ vẫn không thay đổi so với bất kỳ nội dung nào được GET hoặc POST'd. Lý do URL là/mới là bởi vì 'Đăng ký' phải được POST'ing đến/mới. Nếu bạn muốn tính năng này vượt qua, bạn nên thay đổi "Sau đó, tôi phải ở trên trang đăng ký" là "Sau đó, tôi phải ở trên trang đăng ký mới" và viết bước tương ứng trên web theo ý kiến ​​của tôi.

0

Nếu bạn thực sự muốn điều này, bạn có thể hợp nhất hành động 'tạo' của mình thành hành động 'mới' và hành động 'cập nhật' của bạn thành hành động 'chỉnh sửa'. Sau đó bạn sẽ cần phải kiểm tra loại yêu cầu và xử lý nó cho phù hợp.

Điều này sẽ đạt được những gì bạn đang yêu cầu. Ngoài ra, mọi người sẽ có thể sử dụng URL "lỗi" và vẫn truy cập trang hợp lệ. Đó là, ngay cả sau khi nhận được một lỗi, họ có thể sao chép/dán URL và sẽ có một trang GET hợp lệ cho nó.

Điều đó đang được nói, đây là một hack lớn và không phải cái gì tôi khuyên bạn nên làm. Bạn sẽ phải làm rất nhiều legwork và upside là rất nhỏ.

Edit: ví dụ ..

def new 
    if request.get? 
    @user = User.new 

    elsif request.post? 
    @user = User.new(params[:user]) 
    if @user.save 
     redirect_to users_path 
    else 
     render :new 
    end 
    end 
end 

Bạn cũng sẽ cần phải thêm đường tùy chỉnh.

0

Thực sự, điều này trông giống như một sửa chữa một dòng trong thử nghiệm. (Tại sao bạn thích ở trên trang/đăng ký?).

Nếu điều đó thực sự quan trọng, bạn cũng có thể tạm thời chỉ định tham số trong phiên var.

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