2012-02-27 14 views
6

Tôi thực sự bối rối về cách thực hiện điều này.có tệ khi bỏ các hành động REST không sử dụng?

Tôi cũng mệt mỏi và thất vọng, và não của tôi đang bị tổn thương khi nhìn vào nhiều thứ khác nhau.

  1. Thực tiễn kém có để lại các hành động REST không được sử dụng không? Tôi có một mô hình tài nguyên ví dụ, và người dùng có thể gửi chúng, nhưng tôi không cần hành động 'index' để hiển thị chúng vì nó được xử lý bởi bộ điều khiển chỉ mụC# Home. Tất cả những gì tôi muốn làm là sử dụng link_to để đi đến trang với một biểu mẫu để thêm một tài nguyên mới. Vì vậy, bây giờ tất cả các link_to của im cố gắng để làm tiếp tục cố gắng để đi đến/tài nguyên khi tôi làm resources_path. Tôi đọc làm thế nào bạn có thể sử dụng phương pháp 'di sản' và chỉ liên kết ngay đến hành động trong bộ điều khiển nhưng đó là 'không phải là đường ray'. Bây giờ im cố gắng tìm ra cách đường ray là gì nếu im không sử dụng tất cả các hành động REST khác nhau mà nó tạo ra theo mặc định.

  2. kịch bản ở trên có âm thanh như im thực hiện quyền này không? rằng tôi muốn nó ở trong chỉ mụC# home để liệt kê tất cả các tài nguyên chứ không phải là tài nguyên # index?

  3. Nếu thực hành kém, thì làm cách nào để tạo thủ công? tất cả các hướng dẫn tôi thấy trực tuyến là "chỉ cần gõ resource :user và bạn tốt! nó không nói phải làm gì nếu bạn không muốn/cần tất cả chúng

  4. nếu tôi muốn thay đổi url từ mặc định? không đặc biệt quan tâm đến nó nhưng tất cả mọi người trong IRC đang nói với tôi điều này là 'sai'. làm thế nào là thay đổi URL sai? Tôi muốn nó được/tài nguyên/trình và không/tài nguyên/mới. ý nghĩa với tôi và trông chuyên nghiệp hơn.

  5. cho rằng tôi rời khỏi tất cả các url là như vậy. Nếu tôi đi đến/nguồn/mới và nhấp vào 'submit' về hình thức nó nói

Template là mất tích

Missing template 
resources/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/Users/Zesty/Code/gem-portal/app/views" * "/usr/local/lib/ruby/gems/1.9.1/gems/devise-2.0.4/app/views" 

nếu tôi có nguồn lực: nguồn lực trong các tuyến đường của tôi không có ý tưởng tại sao nó không tự động đi đến tài nguyên # tạo:

def create 
    @resource = Resource.new(params[:resource]) 
    end 

Cảm ơn!

Dưới đây là whats trong tuyến đường của tôi bằng cách này, trong trường hợp bất cứ điều gì là glaringly sai

root :to => 'home#index' 

    resources :resources 
    # match '/resource/submit', :to => 'resources#new' 

    match '/learn', :to => 'pages#learn' 
    match '/contact', :to => 'pages#contact' 
    match '/requests', :to => 'pages#requests' 

Trả lời

12

1. Có thực hành kém rời khỏi hành động REST của không sử dụng?
Nó không phải là thực hành kém như xa như tôi có thể trả lời này. Nếu bạn không cần một hành động chỉ mục cho một bộ điều khiển, bạn không có nó, thời gian. Nhưng những gì bạn nên loại trừ hành động này trong các tuyến đường của mình, ví dụ: đang thực hiện resource :resources, :except => [:index]. Điều này có thể trở nên tiện dụng khi bạn giải cứu khỏi lỗi vì NoTemplateError không giống với RoutingError (có nghĩa là bạn có thể bỏ lỡ việc cứu một thứ gì đó trong sản xuất).

Bên cạnh đó, nó là một người trợ giúp nhỏ để phát triển. Khi bạn vô tình viết một liên kết đến chỉ mục bộ điều khiển không được sử dụng, bạn sẽ gặp lỗi trên trang chứa liên kết nếu bạn loại trừ hành động trong các tuyến đường của mình. Nếu bạn không làm điều này, bạn sẽ chỉ thấy lỗi sau khi nhấp vào liên kết vì tuyến đường hợp lệ (nhưng không có chức năng/mẫu/bất kỳ thứ gì).

2.hiện các kịch bản trên âm thanh như im làm điều này phải không? rằng tôi muốn nó ở trong chỉ mụC# home để liệt kê tất cả các tài nguyên chứ không phải là tài nguyên # index?
Tôi không thể trả lời câu hỏi này mà không có thông tin chi tiết về luồng công việc/ứng dụng nghiệp vụ của bạn. Nhưng nếu bạn không cần nó, bạn để nó lại.

Nếu đó là vấn đề về mỹ phẩm (ví dụ: chỉ cần # nguồn lực cơ bản, nhưng dưới một url khác), bạn chỉ có thể tạo tuyến đường match "home", :to => "resources#index". Điều này sẽ phản đối bộ điều khiển nhà tùy chỉnh của bạn và bạn có thể sử dụng tác vụ chỉ mục của mình trên resources sẽ có sẵn theo /home và dưới /resources. Nhưng một lần nữa, điều này có thể không phải là lựa chọn tốt nhất cho luồng công việc/logic của bạn, vì vậy đây chỉ là một gợi ý.

3. Nếu thực hành kém, thì làm cách nào để tạo thủ công?
Có một trang tuyệt vời trên Rails guides page về tất cả các nhu cầu định tuyến của bạn. Có một cái nhìn ở đó.

4. Nếu tôi muốn thay đổi url từ mặc định thì sao?
Đường ray là quy ước qua cấu hình. Có nghĩa là những phương pháp đó là quy ước đường ray. Nó là tốt để dính vào quy ước này, vì vậy mỗi khi bạn quay trở lại ứng dụng của bạn thay đổi mọi thứ, bạn biết ít nhất nó hoạt động như thế nào bởi quy ước đó. Ngay cả những người lập trình đường ray mà không có bất kỳ kiến ​​thức nào về ứng dụng của bạn đều có thể sửa đổi nhanh hơn khi mọi người đang gắn bó với quy ước này. This RoR vs PHP fun commercial explains this very good.

Bạn có thể thay đổi chúng, nhưng bạn không nên.

5. Do đó tôi để tất cả các url giống nhau. Nếu tôi đi đến/resources/new và bấm vào 'submit' trên mẫu nó nói
Sau khi tạo, bạn thường chuyển hướng đến một cái gì đó hoặc hiển thị hành động mới trong cuộc gọi tạo để giữ thông tin của đối tượng hiện tại của bạn (ví dụ: lỗi) sẽ bị mất khi bạn thực hiện chuyển hướng. Bạn hiện đang ở trên hành động tạo (không hiển thị/chuyển hướng hành động khác) để đường ray mong đợi một mẫu create.html.erb.

Ví dụ:

def create 
    @resource = Resource.new(params[:resource]) 

    if @resource.save 
    # record valid and saved, so redirecting to /resources/:id 
    redirect_to @resource 
    else 
    # record not valid. rendering the new.html.erb template 
    # (HINT the new action is NOT called here). 
    render :action => :new 
    end 
end 

Hãy ghi nhớ rằng .new tạo ra một đối tượng mới, nhưng nó không được lưu trữ vào cơ sở dữ liệu, trừ khi bạn gọi ví dụ lệnh .save trên đó.


Đây chỉ là ý kiến ​​và kinh nghiệm của tôi về vấn đề này, vì vậy nếu có ai đó có kinh nghiệm cho rằng có điều gì đó sai, tôi rất vui khi đọc nhận xét và cập nhật câu trả lời của tôi.

+0

wow tuyệt vời. cảm ơn os nhiều, câu trả lời hoàn hảo. như là một sidenote, làm thế nào để giàn giáo làm việc sau đó nếu nó sử dụng chính xác 'tạo' mã hành động? tôi đã xóa những thứ json nhưng im tự hỏi làm thế nào bạn thực sự có thể lưu trong một giàn giáo nếu mã nó mang lại cho tôi không bao gồm .save ...? – Tallboy

+0

huh, điều này nên bao gồm lưu tôi nghĩ? đã không được sử dụng giàn giáo kể từ khi đường ray 2.x vì vậy tôi không thể thực sự nói với bạn, mặc dù. – pduersteler

+0

ah, có thể tôi đã xóa nó và không nhìn thấy nó. cảm ơn một lần nữa! – Tallboy

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