我正在使用 Ruby on Rails 2.3.8 并且我有一个注册表单,我在其中收到一个参数如下: /registration/4
,其中 4 是推荐即将在网站上注册的用户的用户的 ID。
问题是,如果在用户提交注册(表单呈现给 Controller users
, Action create_particular
)时验证失败,站点将重定向到 /users/create_particular
,因此我丢失了我之前拥有的值为 4 的参数。此外,我希望用户停留在同一个 url,即 /registration/4
我怎样才能做到这一点?
最佳答案
然后你应该重写你的 create 方法。您应该使用 redirect_to :back
而不是 render :action
UPD
def new
@word = Word.new(params[:word])
@word.valid? if params[:word]
end
def create
@word = Word.new(params[:word])
if @word.save
redirect_to @word
else
redirect_to new_word_path(:word => params[:word] )
end
end
看起来很脏,但这只是划痕
UPD 2
这确实不是最好的解决方案,但它有效
# routes.rb
match 'words/new' => 'words#create', :via => :post, :as => :create_word
# words_controller
def new
@word = Word.new
end
def create
@word = Word.new(params[:word])
respond_to do |format|
if @word.save
format.html { redirect_to(@word, :notice => 'Word was successfully created.') }
else
format.html { render :action => "new" }
end
end
end
# views/words/new.html.erb
<%= form_for(@word, :url => create_word_path) do |f| %>
...
<% end %>
关于ruby-on-rails - 验证失败时如何保持相同的网址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4879958/