2015-12-14 4 views
-2

Допустим, у меня есть класс Customer и Brand (где у клиента есть много брендов и бренд принадлежит клиенту). Когда пользователь находится на странице показа для конкретного клиента, у него есть возможность щелкнуть кнопку, чтобы добавить новый бренд (эта кнопка перенаправляет форму в форму для создания нового бренда, в котором содержится поле, где пользователь должен указать к которому принадлежит этот бренд). Но когда пользователь добирается до этой формы, ему не нужно вручную указывать, к какому клиенту принадлежит этот бренд, а скорее о том, что информация должна вводиться автоматически на основе customer_id клиента, чью страницу показа, на которую только что смотрел пользователь. Если страница просмотра не просматривалась, поле родительского клиента_и_ид должно быть пустым (как и по умолчанию), и пользователь должен ввести его вручную.Автоматическое заполнение полей simple_form - RAILS

Есть ли способ реализовать это в Rails? Если да, то как?

ответ

1

Ваш вопрос немного сложно понять, но пойдем.

Во-первых, вы должны создать ссылку на новый бренд, что-то вроде:

<%= link_to 'New brand for #{@customer.name}", new_brand_path(customer_id: @customer.id) %> 

Таким образом, вы передаете в customer_id как парам.

В контроллере бренда на новом действии вы будете делать

def new 
    @customer = Customer.find_by_id(params[:customer_id])   
    @brand = @customer ? Brand.new(customer_id: @customer.id) : Brand.new 
end 

Вы видите, что я привел пример, чтобы понять, что делать. Есть лучшие способы сделать это, но я думаю, это поможет вам в том, что вы хотите.

+2

Проблема с этим состоит в том, что Customer.find выдаст ошибку, если он не может найти запись с этим идентификатором. Более безопасным способом было бы делать @customer = Customer.find_by (id: params [: customer_id]) –

+0

Есть ли способ скрыть поле из формы, если params [: customer_id] пройден и показать это только если это не так? – MPorto

+0

Да. вы делаете: <% if @customer do f.input .... end%> – Guido

0

На ссылке с показа страницы, вы могли бы что-то вроде этого

<%= link_to 'New Brand', new_brand_path(customer_id: params[:id]) %> 

Затем в контроллере, вы могли бы иметь некоторый код, который проверяет, если customer_id присутствует в Params хэш в новое действие:

@brand.customer = Customer.find(params[:customer_id]) if params[:customer_id] 

Теперь, когда форма оказывается, при условии использования form_for @brand, поле клиента будет установлен.

Если они связаны с другой страницей (кроме шоу), то просто не передавайте в client_id: params [: id] в вызове метода link_to. Он будет обходить инструкцию if в контроллере, и клиент будет пустым.

0
@new_brand = @customer.brands.new 

Он населяет cusomer_id в @new_brand с правильным значением

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