【发布时间】:2018-06-19 17:36:17
【问题描述】:
我是 Ror 的新手。
在为特定产品创建评论之前,我想在我的 form_for 中添加一个密码字段。此 review.password 应与 product.reviewcode 匹配:
- 如果匹配,则为该产品创建评论。
- 如果没有,您会收到通知:“密码错误...再试一次..”
我已经为此工作了好几天,但无法在我的应用程序上执行此功能... :-( 任何想法...请 :-)
这是我的代码:
views/reviews.form.html.erb:
<% if @reviews.present? %>
Il y a deja un commentaire.
<% else %>
<%= form_for([@product, @product.reviews.new]) do |f| %>
<div id="user_stars"></div>
<%= f.text_area :comment, rows: 3, class: "form-control" %>
<%= f.hidden_field :product_id, value: @product.id %><br>
<%=f.label "Mot de passe communiqué par le vendeur:" %>
<%=f.password_field :password %>
<div class="actions">
<%= f.submit "Evaluez", class: "btn btn-primary" %>
</div>
<% end %>
<% end %>
reviews_controller.rb:
class ReviewsController < ApplicationController
before_action :authenticate_user!
def create
@review.password = nil
unless @review.password == @product.reviewcode
@review = current_user.reviews.new(review_params)
@review.save
redirect_to @review.product
else
render :create, notice: "Le code n'est pas bon"
end
end
private
def review_params
params.require(:review).permit(:comment, :star, :product_id, :user_id, :password)
end
def set_product
@product = Product.find(params[:product_id, :reviewcode])
end
end
product.rb:
class Product < ApplicationRecord
belongs_to :user
has_many :photos
has_many :reservations
has_many :reviews
validates :category, presence: true
validates :state, presence: true
validates :color, presence: true
validates :brand, presence: true
validates :size, presence: true
validates :name, presence: true, length: { maximum: 25 }
validates :description, presence: true, length: { maximum: 70 }
validates :address, presence: true
validates :price, numericality: { only_integer: true, greater_than: 1 }
validates :status, inclusion: { in: [true, false] }
validates :reviewcode, presence: true
def reviewcode
reviewcode = "1234"
end
end
review.rb:
class Review < ApplicationRecord
belongs_to :product
belongs_to :user
validates :comment, presence: true
validates :star, presence: true
validates :product_id, presence: true
validates :password, presence: true
end
【问题讨论】:
-
感谢您分享您的代码。你知道你哪里有问题吗?我注意到您的控制器中有
@review.password = nil。看起来审查密码将永远为零。这是故意的吗? -
当您在
create操作中定义@product时?
标签: ruby-on-rails ruby model-view-controller passwords form-for