2014-07-17 16 views
10

Tôi nhận được lỗi sau:ActionController :: UrlGenerationError tại Điều # chỉnh sửa

Không trận tuyến đường {: action => "hiển thị",: controller => "bài báo",: id => nil} mất tích cần thiết khóa: [: id]

Sau đây là mã hiển thị lỗi.

<%= form_for :article, url: article_path(@article), method: :patch do |f| %> 

Lỗi này là gì, bất cứ khi nào tôi nhấp vào chỉnh sửa từ màn hình trước, tôi nghĩ tôi đang gửi id bài viết.

Đây là tuyến đường cào của tôi ra

 Prefix Verb URI Pattern     Controller#Action 
welcome_index GET /welcome/index(.:format)  welcome#index 
    articles GET /articles(.:format)   articles#index 
       POST /articles(.:format)   articles#create 
    new_article GET /articles/new(.:format)  articles#new 
edit_article GET /articles/:id/edit(.:format) articles#edit 
     article GET /articles/:id(.:format)  articles#show 
       PATCH /articles/:id(.:format)  articles#update 
       PUT /articles/:id(.:format)  articles#update 
       DELETE /articles/:id(.:format)  articles#destroy 
     root GET /       welcome#index 
+0

Bạn có thể đăng đầu ra 'rake routes' của mình không? – Pavan

+0

Tôi đã bao gồm đầu ra đường rake trong câu hỏi chính nó bây giờ – user3726986

+0

Điều gì xảy ra khi bạn thay đổi dòng đó thành '<% = form_for @article, url: article_path (@article), phương thức:: patch do | f | %> '? – Pavan

Trả lời

5

Nếu bạn nhìn vào câu hỏi của bạn

<%= form_for :article, url: article_path(@article), method: :patch do |f| %> 

Check url của bạn: article_path (@article) đây là helper đường cho hành động bài viết diễn của bạn và nếu bạn kiểm tra các tuyến đường cào của bạn, bạn cần yêu cầu get nhưng bạn đang sử dụng phương thức patch hoặc nếu bạn đang cố chỉnh sửa bài viết thì trình trợ giúp đường dẫn của bạn sai và do đó không có lỗi tuyến

Fix

Để hiển thị một bài viết:

Nếu bạn muốn hiển thị một bài báo sau đó thay vì một link_to sử dụng form_for mà theo mặc định sử dụng một yêu cầu get, form_for là được sử dụng để tạo bài viết và không hiển thị bài viết

<%= link_to "Article", articles_path(@article) %> 

Để tạo hoặc chỉnh sửa một bài viết:

a. Sử dụng url đa hình

Nếu bạn muốn tạo một bài báo hoặc chỉnh sửa một bài báo sau đó bạn có thể sử dụng ray url đa hình và không cần phải xác định tùy chọn url, đường ray sẽ xử lý này trong nội bộ. Vì vậy, để tạo và chỉnh sửa một bài báo mà bạn có thể sử dụng các hình thức tương tự

<%= form_for @article do |f| %> 
    // your fields 
<% end %> 

Để làm việc này bạn cần phải có điều này trong điều khiển của bạn

def new 
    @article = Article.new 
end 

def edit 
    @article = Article.find(params[:id]) 
end 

b.Sử dụng path_helpers

Nếu bạn sẽ hardcode tùy chọn url trong hình thức của bạn sau đó nó sẽ đưa bạn đến hành động mà chỉ và do đó bạn sẽ yêu cầu hình thức riêng biệt

Để tạo:

<%= form_for :article, url: article_path do |f| %> 
    // your fields 
<% end %> 

Để chỉnh sửa:

<%= form_for :article, url: article_path(@article) do |f| %> 
    // your fields 
<% end %> 
+0

Tôi đang gặp sự cố chính xác này và thử cả url đa hình và path_helpers để chỉnh sửa một bài viết không hữu ích. Lỗi tương tự phát sinh với path_helpers và một ArgumentError phát sinh với các url đa hình. Tài liệu này xuất phát từ [hướng dẫn đường ray] này (http://guides.rubyonrails.org/getting_started.html#updating-articles). Tôi không chắc chắn các thực hành tốt nhất của Stack Overflow là để phục hồi một vấn đề cũ nhưng tôi nghĩ tôi sẽ để lại một bình luận trước khi thực hiện một bài đăng mới. –

+1

Hóa ra tôi là một thằng ngốc và không nhận thấy mã với '' 'def edit ...' '' mà tôi đã bỏ lỡ. Bỏ qua nhận xét ở trên. –

+0

@ user1489726 không có vấn đề gì. Vui mừng khi biết rằng bạn đã làm việc đó :) – Mandeep

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