2013-08-02 2 views
0

это мой _form_item частичной, в котором я использовал символ: Order_Itemпередавая переменное простую форму символа

<%= simple_form_for :order_item do |f| %> 
..... 
<% end %> 

вот мой взгляд, в котором я хочу сделать это частичный:

<%= content_tag_for :tr , @order.order_items do |i| %> 
<div class="hide"> 
<%= render :partial => "form_item" %> 
</div> 
<% end %> 

Как можно Я передаю объект «i»: order_item?

UPDATE: Я предпочитаю держать его «: Order_Item» вместо того, чтобы изменить его на что-то вроде «Foo».

ответ

0

Вы можете передать i как местных жителей, чтобы парциальное как следует:

<%= render :partial => "form_item", :i => i %> 

и вы будете иметь i, доступные в _form_item частично.

Update:

Локальные переменные, передаваемые частичными являются переменными, а не символы. Вы можете сохранить имя order_item нравится следующим образом:

<%= render :partial => "form_item", :order_item => i %> 

и обновить order_item парциальное следующим образом:

<%= simple_form_for order_item do |f| %> 
..... 
<% end %> 

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

+0

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

+0

Кроме того, если я правильно помню, это не сработает. –

+0

@MarekLipka, что не получится? – vee

0

Вы должны иметь:

<%= render partial: 'form_item', locals: {order_item: i} %> 

или стенографии:

<%= render 'form_item', order_item: i %> 

и в вашем form_item парциальное вы должны иметь:

<%= simple_form_for order_item do |f| %> 
... 
+0

Я пробовал это раньше, но это не сработало.form визуализируется с пустыми полями (это означает, что форма не использует объект i) – Pooya

+0

@Pooya вы могли бы показать все 'form_item' частичные? –

+0

Я не изменился: order_item в order_item.Я сделал это, и теперь я получаю: 'неопределенная локальная переменная или метод 'order_item' для # <# <Класс: 0xac52574>: 0xac46288>' – Pooya

0

Вобще

<%= simple_form_for item do |f| %> 
. 
. 
<% end %> 

и оказывать частичное через

<%= render :partial => 'form_item', :locals => { :item => i } %> 
+0

Я тоже хочу использовать эту форму для новых действий, поэтому я предпочитаю хранить ее: order_item вместо элемента. Есть ли другой путь? – Pooya

+0

Нет, не так далеко, насколько я знаю. SimpleForm угадывает класс из символа и создает экземпляр нового объекта, то есть без установки каких-либо атрибутов. Поэтому вам нужно изменить: order_item на переменную экземпляра. После строгой MVC, создающей экземпляр переменной в представлении, все равно плохой стиль. Это задача контроллера, контроллер - посредник между моделью и представлениями. Представления не должны ничего знать о структуре модели. – lawitschka

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