2009-06-15 38 views
12
redirect_to :controller=>'groups',:action=>'invite' 

nhưng tôi gặp lỗi vì chuyển hướng_để gửi phương thức GET, tôi muốn thay đổi phương thức này thành 'POST', không có: tùy chọn phương thức trong redirect_to tôi sẽ làm gì? Tôi có thể làm điều này mà không cần redirect_to.Rails redirect_to post method?

Edit:

Tôi có điều này trong nhóm/invite.html.erb

<%= link_to "Send invite", group_members_path(:group_member=>{:user_id=>friendship.friend.id, :group_id=>@group.id,:sender_id=>current_user.id,:status=>"requested"}), :method => :post %> 

gọi Liên kết này tạo ra hành động trong group_members điều khiển, và sau khi tạo ra hành động thực hiện Tôi muốn cho nhóm/mời. html.erb với GROUP_ID (Ý tôi là sau khi nhấp vào 'gửi thư mời' group_members sẽ được tạo ra và sau đó là trang hiện tại sẽ được hiển thị) như thế này:

redirect_to :controller=>'groups',:action=>'invite',:group_id=>@group_member.group_id 

sau redirect_to yêu cầu thứ là với phương thức GET, nó gọi chương trình hành động trong nhóm và chịu mời như id và cung cấp cho lỗi này

Couldn't find Group with ID=invite 

tôi mời hành động trong nhóm

def invite 
@friendships = current_user.friendships.find(:all,:conditions=>"status='accepted'") 
@requested_friendships=current_user.requested_friendships.find(:all,:conditions=>"status='accepted'") 
@group=Group.find(params[:group_id]) 
end 

Giải pháp là tôi phải chuyển hướng này với phương thức POST nhưng tôi không thể tìm được cách nào.

Giải pháp xấu: Tôi đã giải quyết vấn đề này mà tôi không thích. Tôi vẫn chờ đợi nếu bạn có giải pháp một cách công bằng.

Giải pháp của tôi là thêm tuyến để mời thoát khỏi lỗi 'Không thể tìm thấy nhóm có ID = mời'.

trong routes.rb

map.connect "/invite",:controller=>'groups',:action=>'invite' 

trong tạo hành động

redirect_to "/invite?group_id=#{@group_member.group_id}" 

tôi gọi giải pháp này bằng ngôn ngữ may 'amele yontemi' trong 'phương pháp lao động thủ công' tiếng Anh (tôi nghĩ).

+0

tại sao bạn muốn theo cách này? bạn có thể cung cấp thêm ngữ cảnh không? – marcgg

+0

Đồng ý, chúng tôi cần thêm thông tin về những gì bạn đang cố gắng đạt được trước khi chúng tôi thực sự có thể cung cấp cho bạn câu trả lời hay. –

+2

bản sao có thể có của [chuyển hướng \ _để sử dụng POST trong đường ray] (http://stackoverflow.com/questions/985596/redirect-to-using-post-in-rails) –

Trả lời

9

Có vẻ như bạn đang nhận được vấp lên bởi cách Định tuyến Rails hoạt động. Mã này:

redirect_to :controller=>'groups',:action=>'invite',:group_id=>@group_member.group_id 

tạo URL trông giống như /groups/invite?group_id=1.

Nếu không có ánh xạ trong routes.rb, bộ định tuyến Rails sẽ ánh xạ điều này đến hành động show, chứ không phải invite. Phần invite của URL được ánh xạ tới params[:id] và khi nó cố gắng tìm bản ghi đó trong cơ sở dữ liệu, nó không thành công và bạn nhận được thông báo bạn tìm thấy.

Nếu bạn đang sử dụng các tuyến đường yên tĩnh, bạn đã có một dòng map.resources trông như thế này:

map.resources :groups 

Bạn cần phải thêm một hành động tùy chỉnh cho invite:

map.resources :groups, :member => { :invite => :get } 

Sau đó thay đổi bạn tham khảo đến params[:group_id] theo phương pháp #invite để chỉ sử dụng params[:id].

31

Câu trả lời là bạn không thể thực hiện POST bằng cách sử dụng redirect_to.

Điều này là do những gì redirect_to không chỉ là gửi một tiêu đề chuyển hướng HTTP 30x cho trình duyệt mà lần lượt GET URL đích, và các trình duyệt làm chỉ GET trên trang đổi hướng

+4

Vâng tôi đã nhận được điều này nhưng có cách nào để giải quyết vấn đề của tôi với redirect_to hoặc không có? –

5

Tôi tìm thấy một giải pháp thay thế mà tôi cần để thực hiện điều này xảy ra trong Rails 3. Tôi đã thực hiện một tuyến đường sẽ gọi phương thức trong bộ điều khiển yêu cầu cuộc gọi sau. Một dòng trong "route.rb", chẳng hạn như:

match '/create', :to => "content#create" 

Đó có thể là thời điểm xấu xí nhưng tuyệt vọng khi gọi các biện pháp tuyệt vọng. Chỉ nghĩ rằng tôi muốn chia sẻ.

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