идти против соглашений REST в формах Rails - PullRequest
0 голосов
/ 03 декабря 2011

Позвольте мне быть более ясным.

мое приложение имеет две таблицы / модели: велосипеды и автомобили

У меня есть форма для просмотра страниц / автомобили / индекс

Однако,даже если форма находится в views / cars / index, у нее есть атрибуты (: pedals и: handlebars) для таблицы Bikes.

1) Какой контроллер должен иметь форму на cars / index с атрибутами для модели Bikesбыть представлен?

2) Как должна выглядеть форма (с точки зрения отправки из представления в индексе автомобилей в модель Bikes? <% = Form_for (@car) do | f |%> ИЛИ <% =form_for (@bike) do | f |%>

3) Какие изменения необходимо внести в маршрут, когда я отправляю данные из индекса представлений / автомобилей / индекса, чтобы вставить данные в таблицу велосипедов?почему я получил сообщение об ошибке отсутствующего контроллера, когда попробовал решение, опубликованное @ axsuul

ниже этой строки, является более ранней (возможно, менее ясной) попыткой объяснить проблему, но я не думаю, что она была ясной

это форма, которую я имею в views / cars / new.html.erb

<%= form_for(@car) do |f| %>
  <% if @car.errors.any? %>

, и результаты видны в views / cars / show и views / cars / index

Однако, если я хочу отправить форму из views/cars/index (Да, я знаю, что вы обычно не отправляете из индекса), а затем показать ее в совершенно другой модели views/bikes/index, что мне нужноизменить на это?

<%= form_for(@car) do |f| %>
      <% if @car.errors.any? %>

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Если я правильно понимаю ваш вопрос, у вас есть форма для создания велосипедов на ваших автомобилях / страница указателя.

В этом случае создайте новый велосипед в действии индексации контроллеров автомобилей,

class CarsController < ApplicationController
  ...
  def index
    @cars = Car.all
    @bike = Bike.new
  end
  ...
end

и используйте его для создания формы,

<%= form_for(@bike) do |f| %>
...

, который будет оставлен таким образом, будет обрабатываться контроллером создания велосипедов.

Я все еще считаю этот RESTful ...

1 голос
/ 03 декабря 2011

Вы можете выбрать любой URL, который хотите отправить, выполнив

<%= form_for(@car), :url => create_car_path do |f| %>

по маршруту

post '/views/cars/index', "cars#index", :as => :create_car

Если вы запрашиваете, какое представление следует отображать после отправки, вы делаете это в контроллере

def index
  @car = Car.new(params[:car])

  if @car.save
    render 'bikes/index'

  end

end

Хм, так что из того, что вы объяснили, вы, вероятно, ищете что-то вроде

bikes_controller.rb

def create
  @bike = Bike.new(params[:bike])

  if @bike.save
    redirect_to cars_path and return  # this should go back to /cars if successful
  end

  render 'cars/index'   # or render /views/cars/index.html.erb
end

cars_controller.rb

def index
  @bike = Bike.new 
end

index.html.erb

<%= form_for @bike, :url => create_bike_path do |f| %>

routes.rb

get 'cars' => "cars#index", :as => :cars
post 'cars' => "bikes#create", :as => :create_bike
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...