我正在使用 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/

10-10 15:34