我创建了一个表单,我希望我的描述为例子有一个由我添加的文本,而不是发送表单的用户。但我不知道如何在控制器中传递我的参数。
我的表单视图
<%= 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
但是当我发送表单时,我可以看到:用户在用户文本之前写的文字,而不是“用户写”。 我想当用户发送表格时我会看到:“用户写:用户写的文字”
感谢您的帮助。
答案 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
编辑显示完整代码,如果未通过验证则避免错误