所以我試圖創建一個電子遊戲審查網站的實踐。Rails - 投票不保存,並創建不提交按鈕?
遊戲有很多評論和投票。這個想法是,爲了發佈評論,你必須首先投票「好」或「壞」,然後提交評論。未經投票,您無法發佈文字評論。
我試圖做到這一點,而不acts_as_voteable寶石...
選票的數據格式是布爾值。 「好」是真的,「壞」是假的。
我如何獲得投票保存?下面是我的routes.rb,_review部分,評論控制器和顯示頁面。
非常感謝球員:)
編輯****:還我想每個用戶只有一票。我正在考慮使用等於1的標記變量,並且在投票時,標記爲-1。這是一個好方法嗎?但是投票的數據類型是布爾型的,那麼如何工作 - 或者我應該將投票數據類型從布爾型更改爲整型嗎?
編輯#2 - 所以我補充說:投入我的參數。
的routes.rb
upvote_game_review_path
POST /games/:game_id/reviews/:id/upvote(.:format) reviews#upvote
downvote_game_review_path
POST /games/:game_id/reviews/:id/downvote(.:format) reviews#downvote
Rails.application.routes.draw do
devise_for :users
root "games#index"
resources :games do
resources :news
resources :reviews, except: [:show, :index] do
member do
post "upvote"
post "downvote"
end
end
end
resources :platforms
resources :genres
end
reviews_controller.rb
class ReviewsController < ApplicationController
before_action :set_review, only: [:show, :update, :edit, :destroy]
before_action :set_game
before_action :authenticate_user!
def new
@review = Review.new
end
def create
@review = Review.new(review_params)
@review.user_id = current_user.id
@review.game_id = @game.id
if @review.save
redirect_to @game
else
render "review"
end
end
def upvote
@review.vote.create = true
redirect_to @game
end
def downvote
@review.vote.create
@review.vote = false
redirect_to @game
end
def edit
@review.update(review.params)
end
def destroy
@review.destroy
redirect_to @game
end
private
def set_review
@review = Review.find(params[:id])
end
def set_game
@game = Game.find(params[:game_id])
end
def review_params
params.require(:review).permit(:comment, :vote)
end
end
_review部分< - 創建一個新的審查
<%= form_for [@game, @reviews.new] do |r| %>
<h3 class="post_review">Review this game</h3>
<p>
<%= r.text_area :comment %>
</p>
<p>
<%= button_to "Good", upvote_game_review_path(@game.id, r) %>
</p>
<p>
<%= button_to "Bad", downvote_game_review_path(@game.id, r) %>
</p>
<p>
<%= r.hidden_field :game_id, value: @game.id %>
<p>
<%= r.submit %>
<% end %>
show.html.erb
<p><%= link_to "<< Home", games_path %></p>
<span><%= link_to "Edit", edit_game_path(@game) %></span>
<span><%= link_to "Delete", game_path(@game), method: :delete %></span>
<div class="game_summary">
<h2><%= @game.title %></h2>
<%= image_tag @game.image %>
<p>Release Date: <%= @game.release_date %> </p>
<p>Genre: <%= @game.genre_id %> </p>
<p>Platforms: <%= @game.platform_id %></p>
</div>
<%= link_to "Add News", new_game_news_path(@game) %>
<h2>News & Articles</h2>
<%= link_to "view all", game_news_index_path(@game) %>
<% @news.each do |n| %>
<ol>
<li><%= link_to n.title, game_news_path(@game.id, n.id) %></li>
</ol>
<% end %>
<div class="game_review submit">
<%= render "review" %>
</div>
<% @reviews.each do |review| %>
<p><%= review.comment %></p>
<p><%= link_to "delete", game_review_path(@game.id, review.id), method: :delete %></p>
<% end %>
不知道你解決每個評審一票的想法。這篇文章看起來很有希望http://stackoverflow.com/questions/4836897/validate-the-number-of-has-many-items-in-ruby-on-rails。 –
你好,非常感謝你的投入。我嘗試了兩個建議,但都沒有成功。 upvoting仍然不會保存 - 並downvote現在給出了一個錯誤..「無法找到評論與'id'=#」 –
giantqtipz
你是否提供的行動ID?該路線正在生成的路徑是什麼? – Makoto