ошибка form_for в рельсах 3 - PullRequest
0 голосов
/ 02 апреля 2012

Я пытаюсь сохранить модель с именем 'customer', используя тег form_for. У меня нет контроллера для этой модели, я надеялся использовать другой контроллер 'public' для этой задачи. Итак, вот мой взгляд:

<%= form_for @customer do |f| %>
<div class="field">
    <%= f.label :name %><br/>
    <%= f.text_field :name %>
</div>
  .... and then
 <%= f.submit 'Order', :action => :save_order %><br/>

и вот мой контроллер

def check_out
@customer = Customer.new
end

def save_order
@customer = Customer.new(params[:customer])
credit_card_no = @customer.credit_card
@order = Order.new
@order.line_items << @cart.items
@customer.orders << @order
if @customer.save
    # process credit card
    @cart = nil
    redirect_to(:action => :show_bill, :id => @order.id)
else
    flash[:notice] = 'Could not process your credit card information'
    render(:action => :check_out)
end
end

Представление загружается из действия 'check_out', и оно должно было перейти к действию 'save_order', но я получаю сообщение об ошибке для кода 'form_for', что я делаю неправильно? Но если я создаю контроллер или скаффолд для «клиента» и пытаюсь его использовать, меня перенаправляют на путь «клиент / шоу /: id», и я этого не хочу.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Если вы хотите использовать другой контроллер с form_for, вам нужно использовать параметр: url в form_for.

<%= form_for @customer, :url => { :controller => "your controller name",
:action => "save_order" } do |f| %>

#your code

<% end %>
1 голос
/ 02 апреля 2012

Извините, но вы просите помощи в том, как заставить что-то работать, делая это неправильно.Я постараюсь объяснить, и я надеюсь, что это поможет вам.

Если вы хотите сохранить модель клиента, вы должны использовать, угадайте, какой контроллер клиента.Некоторые люди любят использовать строительные леса, некоторые ненавидят их.Но тот факт, что код скаффолда перенаправляется в метод show после сохранения модели, которую легко изменить, не должен помешать вам использовать ее.Эшафот как раз для того, чтобы помочь новичкам и / или найти способ придумать что-то быстрое и грязное.Изменение сгенерированного скаффолдом кода здесь и там не только обычно необходимо, но и является хорошим способом изучения.

Чтобы сохранить ордер, вы должны использовать :: drumroll ::, контроллер ордеров.Я даже не знаю, что бы сделал «публичный» контроллер (который сам по себе должен сказать, по крайней мере, что он плохо назван).

Я предлагаю вам взять книгу Agile Web Development с Rails и пройтидепо приложение.Он хорошо охватывает все эти темы, и вы многому научитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...