Trong ứng dụng Ruby on Rails tôi đang cố gắng sử dụng thông tin từ các trường không được liên kết với mô hình trong quá trình xác thực.Đường ray: Sử dụng các trường biểu mẫu không được liên kết với mô hình trong xác nhận
Dưới đây là một phần của mô hình là một ví dụ (toàn bộ mô hình đã nhận được kinda lớn):
class Scorecard < ActiveRecord::Base
belongs_to :course
belongs_to :user
validate :attributes_consistency
def attributes_consistency
# Executed for all scorecards. Checks if the user completed the hole attributes correctly
if (params[:no_fairways] and any_fairways? and !only_nine?) or (params[:no_fairways] and !any_h1_to_h9_score_blank and any_h1_to_h9_fairway? and only_nine?) or (params[:no_fairways] and !any_h10_to_h18_score_blank and any_h10_to_h18_fairway? and only_nine?)
errors.add_to_base("You inidicated that you missed all the fairways, but you also marked one or more fairways in the scorecard. Either uncheck the fairways mistakenly marked or uncheck the 'No fairways' checkbox.")
end
if (params[:no_girs] and any_girs? and !only_nine?) or (params[:no_girs] and !any_h1_to_h9_score_blank and any_h1_to_h9_gir? and only_nine?) or (params[:no_girs] and !any_h10_to_h18_score_blank and any_h10_to_h18_gir? and only_nine?)
errors.add_to_base("You inidicated that you missed all the greens, but you also marked one or more greens in the scorecard. Either uncheck the marked greens on the scorecard or uncheck the 'No GIRs' checkbox.")
end
end # attributes_consistency
def any_h1_to_h9_score_blank?
h1_score.blank? or h2_score.blank? or h3_score.blank? or h4_score.blank? or h5_score.blank? or h6_score.blank? or h7_score.blank? or h8_score.blank? or h9_score.blank?
end
def any_h10_to_h18_score_blank?
h10_score.blank? or h11_score.blank? or h12_score.blank? or h13_score.blank? or h14_score.blank? or h15_score.blank? or h16_score.blank? or h17_score.blank? or h18_score.blank?
end
def any_h1_to_h9_fairway?
h1_fairway? or h2_fairway? or h3_fairway? or h4_fairway? or h5_fairway? or h6_fairway? or h7_fairway? or h8_fairway? or h9_fairway?
end
def any_h10_to_h18_fairway?
h10_fairway? or h11_fairway? or h12_fairway? or h13_fairway? or h14_fairway? or h15_fairway? or h16_fairway? or h17_fairway? or h18_fairway?
end
def any_h1_to_h9_gir?
h1_gir? or h2_gir? or h3_gir? or h4_gir? or h5_gir? or h6_gir? or h7_gir? or h8_gir? or h9_gir?
end
def any_h10_to_h18_gir?
h10_gir? or h11_gir? or h12_gir? or h13_gir? or h14_gir? or h15_gir? or h16_gir? or h17_gir? or h18_gir?
end
Vì vậy, làm thế nào tôi có thể truy cập params
từ mô hình?
Đây sẽ là một giải pháp tuyệt vời nhưng bạn có thể đưa ra ví dụ về cách tôi có thể triển khai điều này không? Trong Railscast cụ thể, các "thuộc tính ảo" thực sự là các phương thức thao tác các thuộc tính thực. Tôi không có thuộc tính nào có thể liên kết với 'no_fairways' hoặc' no_girs'. – Jay
@James - thuộc tính ảo không phải được liên kết với bất kỳ thuộc tính cơ sở dữ liệu nào. Bạn có thể định nghĩa các thuộc tính instance cũng sẽ hoạt động tốt. Đã cập nhật câu trả lời. – Anurag
Lưu ý rằng attr liên kết với hộp kiểm sẽ không có giá trị trythy hoặc falsy. Theo mặc định, 'check_box' tạo đánh dấu dẫn đến chuỗi' "0" 'khi không được đánh dấu và' "1" 'khi được chọn. Ngay cả '" 0 ".present?' Là sự thật. – kolen