提交表单后,Rails会再次重定向到同一页面

时间:2015-06-26 09:23:16

标签: html ruby-on-rails forms

[更新了问题,请看后半部分]

我正在构建一个简单的注册/登录表单的简单Web应用程序。 我想要的系统是

  • 您在表单中填写了您的姓名和关键字。(在/save_user.html)
  • 按“确认”链接
  • 检查是否使用了用户名。是的 - >更新,假 - >注册
  • 重定向到/goodbye.html(控制器)

现在我每次都使用新的用户名/关键字进行测试。 问题是,最终输出是/save_update,并最终出现一个错误,表明没有参数是givin。 (当然没有参数是givin)

我有什么可以做的吗?三江源!

控制器

#
# Register user
#
def save_user
  point_id = session[:point_id]
  @point = Point.find(point_id)
end

def save_update
  username = params[:user][:name]
  keyword = params[:user][:key]
  point_id = session[:point_id]
  #
  # if username exists, match password.
  # if not, create new.
  #
  user = User.find_by_username(username)
  if user
    if user.keyword == Digest::SHA1.hexdigest(user.salt + keyword)
      # User exists!
      render text: 'Matched!'
    else
      # keyword is wrong
      render text:"keyword is wrong.."
    end
  else
    # save new user!
    user = User.create(salt:SecureRandom.hex(4))
    user.update(
        username:username,
        keyword:Digest::SHA1.hexdigest(user.salt + keyword)
    )
    point = Point.find(point_id)
    point.update(:user_id => user.id)

    return redirect_to action: :goodbye
  end
end

def goodbye
  # goodbye.html.erb exists
  point_id = session[:point_id]
  point = Point.find(point_id)
  @username = User.find(point.user_id).username
end

查看(save_user.html.erb)

<%= form_tag({action: :save_update}, {name: :user_info, method: :post}) do -%>
    <p>Username(英数字):
      <%= text_field_tag("user[name]", "", options:{ id:'user_name' }) %></p>
    <p>Keyword(英数字)  :
      <%= text_field_tag("user[key]", "", options:{ id:'user_key' }) %></p>
    <br>
    <!-- see diagnose2_helper.rb! ↓ -->
    <%= submit_link_tag(name = "confirm", form_id = "user_info", action="save_update") %>
<% end %>

辅助

def submit_link_tag(name = "submit", form_id, action)#, options = {})
  content_tag( :a, name, { "href" => "./#{action}", "onclick" => "document.#{form_id}.submit();"})
end

我现在意识到我的代码有两个问题,但是虽然它改变了它,但它没有解决它。

  1. 在save_user.html.erb中,我有一个form_tag({action: :save_update} ...,还有submit_link_tag,其中包含相同的操作。所以它两次调用save_upate动作。

  2. 即使我删除了{action: :save_update},我也遇到了同样的错误,但这次似乎是因为submit_link没有发送任何哈希。

  3. 我现在将重新考虑我的代码,但如果有人对此问题有任何想法,谢谢,这将非常有帮助。

2 个答案:

答案 0 :(得分:1)

试试这个

redirect_to action: :goodbye

不是

return redirect_to action: :goodbye

希望这对你有用。

答案 1 :(得分:0)

在您的控制器中使用

 redirect_to :back