Не хотите отображать отношения neo4j в форме

Я использую neo4j в своем текущем приложении и впервые использую эту базу данных, поэтому у меня много сомнений. Самое главное сейчас следующее.

Я настраиваю свои формы ввода (как вы можете видеть в этом вопрос я задал) и вот одна из моих моделей:

class Contact 
  include Neo4j::ActiveNode
  property :first_name, type: String
  property :surname, type: String
  property :email, type: String
  property :phones, type: String
  has_one :in, :address, type: :HAS_ADDRESS
  has_one :in, :title, type: :HAS_TITLE
  has_one :in, :gender, type: :HAS_GENDER
end

Насколько я понимаю, эти отношения создают свои собственные свойства в моей модели, потому что, когда я генерирую свой скаффолд, свойства :address, :title и :gender находятся в форме, даже если они явно не созданы в моей модели.

Бывает, что некоторые из этих свойств не должны проявляться. Это случай :address, который я буду отображать в партиале в соответствующих ситуациях.

Другие свойства, определенные отношениями neo4j по умолчанию, :gender и :title, должны отображаться по мере выбора HTML.

Вот мой вопрос: Как я могу различать при программном создании моей формы свойства, которые я описал, и те, которые генерируются отношениями на уровне генератора форм?

Другими словами, что я должен поместить в свой **lib/templates/erb/scaffold/_form.html.erb, чтобы гарантировать, что некоторые из этих свойств не отображаются, а другие отображаются как теги выбора HTML. ?**

Я думал о создании каких-то методов типа is_displayable? а is_select? в свойстве, но я действительно не знаю, где я могу это сделать, потому что эти свойства нигде явно не объявлены.

Любые предложения по этому поводу?


person Ed de Almeida    schedule 11.03.2016    source источник
comment
Спасибо за выпуск, @cybersam!   -  person Ed de Almeida    schedule 11.03.2016


Ответы (1)


Я бы не сказал, что ассоциации создают свойства. Ассоциации (has_one и has_many) и свойства создают методы в вашем классе модели Ruby и его объектах.

Кроме того, вы можете сделать это несколькими способами, ни один из которых не является специфичным для драгоценного камня neo4j (и он не был бы специфичен для ActiveRecord, если бы вы делали это).

У вас может быть массив в вашем представлении, который вы повторяете. У вас может быть константа в модели, которая определяет, какие из них доступны для редактирования, а затем определяете is_editable? аналогично тому, что вы предлагаете.

Но, вероятно, ни один из них не будет рекомендован в настройке контроллера представления модели в Rails. Контроллеры обычно отвечают за принудительное применение строгих параметров, поэтому вам, вероятно, понадобится константа там, который можно использовать как в качестве переменной, передаваемой в представление, так и использовать ее для проверки значений по мере их отправки (потому что только потому, что ваше представление не показывает эти поля, это не означает, что злоумышленник не может не создавать свою собственную форму или отправлять что-то вроде плагина Postman для Chrome)

person Brian Underwood    schedule 13.03.2016
comment
Спасибо! Очень хорошо объяснил. Я думал, что это свойства, потому что стандартный генератор представлений перебирает свойства и показывает эти неявно созданные поля. Я немного подумал над проблемой на выходных, и наши выводы совпадают. Контроль этой ситуации должен осуществляться на уровне контроллера, в основном из соображений безопасности, но также и для простоты. - person Ed de Almeida; 14.03.2016