更改控制器中的参数

时间:2013-06-07 13:58:10

标签: ruby-on-rails ruby ruby-on-rails-3 forms controllers

我创建了一个表单,我希望我的描述为例子有一个由我添加的文本,而不是发送表单的用户。但我不知道如何在控制器中传递我的参数。

我的表单视图

<%= form_for @issue, :url => contact_path do |form| %>
 <%= form.label :description %>
      <%= form.text_area :description  %>

我的控制器:

def create
 @issue = Issue.create(params[:issue])
 @issue.description = "The user write" + params[:issue][:description]

   if @issue.save
    flash[:succes] = "good"
    redirect_to root_path
  else
    flash[:avertissement] = "try again"
    redirect_to contact_path
       end
  end

但是当我发送表单时,我可以看到:用户在用户文本之前写的文字,而不是“用户写”。 我想当用户发送表格时我会看到:“用户写:用户写的文字”

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我很惊讶你没有收到以下错误。

TypeError in IssuesController#create
can't convert nil into String

我这样说是因为你似乎没有在这一行使用正确的params哈希键。

@issue.description = "The user write" + params[:description]

相反它应该如下。

@issue.description = "The user write " + params[:issue][:description]

只进行此更改,您的代码应按预期工作。

另外,尝试使用Issue.new而不是Issue.create。像这样。

def create
  @issue = Issue.new(params[:issue])
  @issue.description = "The user write" + params[:issue][:description]

  if @issue.save
    flash[:succes] = "good"
    redirect_to root_path
  else
    flash[:avertissement] = "try again"
    redirect_to contact_path
  end
end

使用.create将创建一个新问题,验证它并将其保存到数据库中。使用.new只会创建一个新问题,但在调用.save之前不会将其保存到数据库中。您现在使用.create的方式,在更改说明之前,您的问题将保存到数据库中。然后,当您尝试再次保存时,由于某种原因无法保存它。

答案 1 :(得分:1)

您可以在创建问题之前设置params [:issue] [:description](在控制器中):

def create
  original_description = params[:issue] && params[:issue][:description]
  params[:issue][:description] = "The user write #{original_description}"
  @issue = Issue.new(params[:issue])

  if @issue.save
    flash[:succes] = "good"
    redirect_to root_path
  else
    @issue.description = original_description
    flash[:avertissement] = "try again"
    redirect_to contact_path
  end
end

编辑显示完整代码,如果未通过验证则避免错误