Параметр передается как ноль в форме Rails - PullRequest
0 голосов
/ 03 сентября 2010

У меня есть форма, в которой я пытаюсь выполнить очень простые операции CRUD на рельсах с MongoDB.

У меня есть контроллер

class RecipesController < ApplicationController   
  def new
    @recipe = Recipe.new
  end

  def update
  end

  def create
    recipe = Recipe.create(params[:title])
    redirect_to params[:title]
    @recipes = Recipe.all
  end

  def index 
    @recipes = Recipe.all
  end
end

моя форма

<%= form_for Recipe.new do |f| -%>

<%= f.text_field :title %>

<%= f.submit "Create Recipe" %>

<% end %>

мне кажется довольно простым.Однако параметры не доходят до контроллера, кажется.

Я вижу параметры, переданные через webrick

Started POST "/recipes" for 127.0.0.1 at 2010-09-02 14:15:56 -0800
  Processing by RecipesController#create as HTML
  Parameters: {"authenticity_token"=>"8oyq+sQCAEp9Pv864UHDoL3TTU5SdOXQ6hDHU3cIlM
Y=", "recipe"=>{"title"=>"test"}, "commit"=>"Create Recipe"}
Rendered recipes/create.html.erb within layouts/application (4.0ms)
Completed 200 OK in 51ms (Views: 16.0ms)

, но redirect_to params [: title] возвращает ошибку с нулевым значением.

Я заметил, что titleвнутри параметра 'recipe', и я не был уверен, может ли это быть частью проблемы.

Одна из многих вещей, которые меня смущают, заключается в том, что мне никогда не приходится вызывать create?Это правильно?Я называю 'new' в форме, и по какой-то причине rails автоматически вызывает 'create'?

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

Попробуйте поставить перенаправление в вашем контроллере после @recipes = Recipe.all, вот так, и сделайте ваши переменные и переменные экземпляра:

def create
  @recipe = Recipe.new(params[:title])
  @recipes = Recipe.all
  respond_to do |format|
    if @recipe.save
      format.html redirect_to params[:title]
    end
  end
end

Ваш синтаксис довольно уродливый. Я бы посоветовал использовать готовые генераторы Rails, чтобы подготовить вашу работу и основывать свой проект на этом, пока вы не станете хорошими в том, что делаете.

Рельсы 2:

script/generate scaffold Recipe name:string ingredients:text

Рельсы 3:

rails g scaffold Recipe name:string ingredients:text

Тогда убедитесь, что вы rake db:migrate

0 голосов
/ 03 сентября 2010

Как вы предполагаете, параметр title находится внутри вашего recipe набора параметров.Итак, для создания вашего рецепта вам нужно сделать:

Recipe.create(params[:recipe])

NB.это вернет false и не создаст рецепт, если проверки по рецепту не пройдены - например, если вам нужен заголовок.Вы не проверяете это и, возможно, захотите.

Итак, аналогично, если вы хотите перенаправить заголовок нового рецепта (я понятия не имею, почему вы захотите, поскольку это, вероятно, не так)Это правильное местоположение, но я согласен с вашим примером), вам нужно сделать:

redirect_to params[:recipe][:title]

или вы можете получить доступ к названию на только что созданном рецепте r.title.

Кроме того, если вы перенаправляете на другое действие, настройка переменных экземпляра (@recipes) не имеет смысла, так как они будут потеряны при перенаправлении.

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