0

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

我的表单视图

<%= 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

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

谢谢你的帮助。

4

2 回答 2

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 的方式是在更改描述之前将您的问题保存到数据库中。然后当您再次尝试保存时,由于某种原因无法保存。

于 2013-06-07T14:31:44.473 回答
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

编辑显示完整代码并避免错误,如果它没有通过验证

于 2013-06-07T15:01:40.037 回答