2

Возможно ли, чтобы мы могли писать условные операторы в нашем файле модели Rails, например, в моем случае, если я хочу реализовать некоторые проверки на основе того, является ли пользователь singned_in или нет в моем Клиенте. rb-файл.Условные выражения в файле модели Ruby on Rails

if user_signed_in? // if signed_in is true 
    //my validation code here 

затем некоторые специальные валидация и

else !user_signed_in? // if signed_in is false 
    //my validation code here 
+0

Эй я думаю, вы можете попробовать '' if' и elsif' –

ответ

4

current_user, user_signed_in? и т.д. не доступны в модели.

Rails 3 devise, current_user is not accessible in a Model ?

Короче говоря, ваши ориентированные на пользователя условия должны быть в контроллер, модель тянуть & манипулировать данными только ...

enter image description here

я отправляю этот образ все время; он показывает, как выглядит стандарт MVC. Rails is MVC framework ... показывает вам, как модель и другие элементы работают вместе, чтобы заставить ее работать исправно.

Как вы можете видеть, контроллер действует как «хаб», который склеивает все это вместе. Чтобы ваше приложение структурировалось правильно, вы в идеале хотите поместить свою логику среднего уровня в контроллер, логику уровня данных в вашу модель и поверхностную логику в свое мнение.

EG:

#Model 
class Products 
    belongs_to :user 
end 

#controller 
def index 
    @products = user_signed_in? ? current_user.products : Product.all 
end 

#view 
<% @products.each do |product| %> 
    <%= product.name if product.name %> 
<% end %> 

Ответ Вам нужно указать логику проверки вам требуется, что позволяет применять необходимые данные в контроллере/модель


Если вы хотите использовать пользователя в модели, вам необходимо будет использовать условия на уровне контроллера и передать результаты в модель:

#app/controllers/users_controller.rb 
class UsersController < ApplicationController 
    def create 
     @user = User.new user_params 
     @user.online = user_signed_in? 
    end 

    private 

    def user_params 
     params.require(:user).permit(:x, :y, :z) 
    end 
end 

#app/models/user.rb 
class User < ActiveRecord::Base 
    validates :online, presence: true 
end 
+1

Также иногда полезно создать «команду» или «сервис» классов, чтобы сохранить этот вид логики от обоих контроллеров _AND_ моделей. https://blog.engineyard.com/2014/keeping-your-rails-controllers-dry-with-services – mahemoff

+0

@RichPeck: Моя проблема заключается в проверке идентификатора электронной почты, который вводит клиент, если user_signed_in? истинно, тогда электронное письмо должно проверяться со всеми возможными проверками. Если не signed_in, тогда вам не нужно проверять уникальность, как решить эту проблему, можете ли вы мне помочь? –

+0

Почему вы просто не проверяете форму электронной почты; Я не вижу, что их подписка имеет какое-то важное значение для этого? –

0

Что-то вроде этого?

validates :my_attribute, presence: :true, if: :user_signed_in? validates :my_attribute, presence: :false, unless: :user_signed_in?

Смежные вопросы