2016-09-14 2 views
0

Я хочу, чтобы каждый пользователь имел только одну строку данных в таблице с именем business. Он может редактировать его во второй раз.Rails - пользователи должны иметь только одну строку данных в таблице

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

Как я могу это достичь?

Вот мой код ...

<%= form_for @new_business do |f| %> 
    <%= f.text_area :first_problem %> 
    <%= f.submit %> 
<% end %> 

Скриншот таблицы данных

Table data screenshot

Любой помощь ценится, как я новичок в рельсы. Благодарю.

+0

Не могли бы вы выслать свой код для своего контроллера? У вас должно быть отдельное действие для редактирования объекта или создания нового. – rockusbacchus

ответ

0

Один пользователь может иметь только один бизнес, вам необходимо установить связь между ними

В user.rb модели

has_one :business 

В business.rb модели

belongs_to :user 

Для вашего второго проблема, я думаю, что вы не передаете идентификатор строки, для которого хотите обновить столбцы, поэтому каждый раз он создает новую запись для этого столбца

+0

Если я использую has_one: бизнес, то для создания нового бизнеса мне нужно использовать Business.new вместо current_user.businesses.new правильно? – Praveen

+0

Однако у меня есть пользователь, который проверяет: user_id уникальность в бизнесе.rb, поэтому у него будет только одна запись для любых пользователей. Теперь, как передать идентификатор строки при отправке форм? – Praveen

+0

Да, вам также нужно создать другое действие для обновления столбцов, вы можете передать идентификатор строки внутри вашего хелпера пути формы, например 'edit_path (row_id)' и внутри действия вашего контроллера, вы можете найти эту строку по id и обновить конкретная колонка –

0

Похоже, что ваш фрагмент кода является вашим новым шаблоном (т. "Приложение/просмотров/предприятия/new.html.erb"). Это следует использовать только тогда, когда вы хотите создать новый объект. Ваш контроллер, вероятно, говорит что-то вроде

def new 
    @new_business = Business.new 
end 

Когда форма отправлена,: создать действие в контроллере будет вызываться, который должен создать новую запись в базе данных.

Если вы хотите отредактировать этот объект, вы используете действие редактирования в своем контроллере, соответствующее представлению edit.html.erb. Что-то вроде этого в контроллере:

def edit 
    @business = Business.find(params[:id]) 
end 

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

Сложная часть того, что вы пытаетесь выполнить, ограничивает каждого пользователя только возможностью создания одной записи в базе данных. Существует много способов сделать это, но общая идея заключалась бы в ограничении доступа пользователя к новому и создании действий в контроллере после того, как они уже создали запись. Вы можете сделать это, используя before_action (при использовании Rails 4.0 или выше) или before_filter (при использовании Rails < 4.0), чтобы вызвать метод, который проверяет, создал ли пользователь запись.

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