2011-02-05 26 views
11

Tôi đang cố gắng triển khai đá quý bỏ phiếu thumbs_up trên ứng dụng Rails 3, tuy nhiên các hướng dẫn không rõ ràng về triển khai thực tế. Sau khi yêu cầu đá quý [đá quý 'thumbs_up'] và sau khi tạo và chạy di chuyển thích hợp [ray tạo thumbs_up db & & cào: di chuyển] README giải thích như sau:Làm rõ về cách sử dụng đá quý bỏ phiếu "thumbs_up" với Rails 3

Để tham gia bình chọn cho một mô hình, bạn có thể làm như sau:
* Viết tắt cú pháp
voter.vote_for (voteable) # Thêm 1 phiếu
voter.vote_against (voteable) # Thêm một -1 phiếu
voter.vote (voteable, vote) # Thêm hoặc +1 hoặc -1 bỏ phiếu: bỏ phiếu => true (1), bỏ phiếu => sai (-1)

voter.vote_exclusively_for (voteable) # Loại bỏ bất kỳ phiếu trước bởi rằng cử tri cụ thể và phiếu bầu cho.
voter.vote_exclusively_against (voteable) # Loại bỏ bất kỳ phiếu trước đó bởi đó cử tri đặc biệt, và phiếu chống. *

Tôi đã giả định rằng việc sử dụng các 'cử tri' và 'voteable' trong README ví dụ là các stand-in cho các đối tượng trong ứng dụng, nhưng việc sử dụng vẫn còn nebulous với tôi.

Ví dụ về nội dung của chế độ xem, bộ điều khiển và tuyến đường.rb của tôi trông giống như một trợ giúp TREMENDOUS. Tôi đã dành nhiều ngày cố gắng tìm ra điều này!

Trong ứng dụng của tôi, tôi có Người dùng bỏ phiếu cho Bài đăng - trong đó có hai loại - Sự kiệnLiên kết. Bài viết này được gọi là sử dụng <% = render: một phần => @posts%> và mỗi bài cá nhân sử dụng như xem nó "_event.html.erb" hoặc "_link.html.erb" - tùy thuộc cho dù đó là một sự kiện hoặc một liên kết.

Trả lời

24

Hy vọng tôi có thể giúp bạn một chút.

Máy phát điện nên tạo mô hình Vote cho bạn. Đây là mô hình giữ tất cả các phiếu bầu, nhưng bạn tương tác với gián tiếp thông qua các phương pháp mà bạn đã mô tả ở trên.

Vì vậy, cho bạn:

class User < ActiveRecord::Base 
    acts_as_voter 
end 

class Post < ActiveRecord::Base 
    acts_as_voteable 
end 

Điều đó sẽ giúp bạn thiết lập với các phương pháp thumbs_up trong mỗi mô hình. Ví dụ:

Sau đó, nếu bạn có hành động điều khiển trong PostsController được liên kết từ "mũi tên lên" trên trang web của bạn, bạn có thể tạo phiếu bầu cho người dùng đó cho bài đăng đó.

Một cái nhìn như thế này:

<%= link_to('vote for this post!', vote_up_post_path(@post), :method => :post) %> 

và một tuyến đường.RB như thế này:

resources :posts do 
    member do 
    post :vote_up 
    end 
end 

Và cuối cùng, trong bộ điều khiển:

class PostsController < ApplicationController 
    def vote_up 
    begin 
     current_user.vote_for(@post = Post.find(params[:id])) 
     render :nothing => true, :status => 200 
    rescue ActiveRecord::RecordInvalid 
     render :nothing => true, :status => 404 
    end 
    end 
end 
+1

Hey brady8, có thể có nhiều hơn một mô hình mà 'acts_as_voter'? Ví dụ: giả sử tôi có mô hình 'Người dùng' và mô hình' khách hàng'. Cả hai có thể hành động như một cử tri và nó hoạt động tốt không? – marcamillion

+4

Vâng, chắc chắn. – bouchard

+0

@ brady8 Tôi nhận được lỗi NoMethod giống như đã đề cập trong câu trả lời dưới đây. Bạn có thể vui lòng giải thích về điều đó? –

0

Đây chỉ là một sự tiếp nối của câu trả lời Brady của.

Brady đã có đoạn mã sau vào quan điểm của ông

<%= link_to('vote for this post!', vote_up_post_path(@post), :method => :post) %> 

những gì ông có nghĩa là .. từ link_to theo mặc định sử dụng :method => 'get' & ông muốn cập nhật các bản ghi sử dụng bài & không nhận được nên anh đang sử dụng :method => 'post'

U có thể sử dụng <% = button_to ('bỏ phiếu cho bài đăng này!', Vote_up_post_path (@post)%>, vì nút theo mặc định sử dụng :method => :post

nên các tuyến nên

resources :posts do 
    member do 
    post :vote_up 
    end 
end 

đây trong post :vote_up bên trong thành viên, của nó method => :post & không điều khiển bài

nhưng nếu bạn được xác định để sử dụng link_to mà không :method => :post một cái gì đó như thế này

<%= link_to('vote for this post!', vote_up_post_path(@post)) %> 

thì định tuyến của bạn phải là

resources :posts do 
    member do 
     get :vote_up 
    end 
end 

Hy vọng điều này sẽ hữu ích!

1

Routing Lỗi

Không trận tuyến đường {: action => "vote_up",: controller => "microposts", : id => nil}

đây là liên kết Tôi đang sử dụng và giả định đây là nơi định tuyến không được chỉ định chính xác. Tôi chạy các tuyến đường cào và có một tuyến được gọi là vote_up_micropost. Có điều gì khác tôi nên xem xét. Cảm ơn bạn

đây là link tôi đã thêm

<%= link_to('vote for this post!', 
    vote_up_micropost_path(@microposts), 
    :method => :post) %> 
+0

Có khả năng biến @microposts của bạn là số không ... đó là lý do tại sao nó cố gắng gửi bạn đến: id => nil. – bouchard

+0

Vị trí và cách đặt biến @microposts ở đâu và như thế nào? – gbutters

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