我如何在Ruby中将参数从View传递给Controller

时间:2015-10-22 07:45:00

标签: ruby-on-rails parameter-passing

#app/controllers/sessions_controller.rb
class SessionController < ApplicationController
  def new
    @session = Session.new 
  end

  def fetch
    #@user = User.session(params [:user])
    redirect_to "http://www.google.com"
  end

  def create
    emai = params[:email]
    puts emai
    user = User.find_by(:email => session[:emai])

    #user = User.find_by (params [:email])
    #user = User.find_by email: 'abc@xyz.com'
    #user = User.find_by(params[:Email])

    #if (session[:Email] = user.email)
    if (user)
    redirect_to "http://www.yahoo.com"
      flash[:notice] = "You signed up successfully"
      flash[:color]= "valid"

    else
      flash[:notice] = "Form is invalid"
      flash[:color]= "invalid"
      redirect_to "http://www.google.com"
    end
    #redirect_to "http://www.yahoo.com"
  end
end

每次执行我的视图时,即使我传递参数,我也会被重定向到google.com。

由R Peck编辑:

如果设置了参数,我的逻辑应该将人们发送给雅虎,但仍然发送给Google,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

尝试:

task.cancel(true);

如果您只是致电 user = User.find_by(:email => params[:sessions][:emai]) ,那么在致电孩子params[:email]之前,您应该先打电话给父母。

,您无法获得电子邮件的价值。

答案 1 :(得分:0)

您的代码有些问题。

以下是我写的内容:

#app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
   def new
      @session = Session.new
   end

   def create
      email = params[:sessions][:email]
      user = User.find_by email: email

      url    = user ? "google" : "yahoo"
      colour = user ? "valid" : "invalid"
      notice  = user ? "You signed up successfully" : "Your form is invalid"

     redirect_to "http://#{url}.com", notice: notice, color: colour
   end

   private

   def session_params
      params.require(:session).permit(:session, :params)
   end
end

<强> OOP

我认为这可能有点先进,但无论如何我都会写它,为了我自己的利益。

Rails是object orientated(它建立在Ruby上,是一种OOP语言)。这意味着每次创建/调用控制器时,它都应该以对象为中心。

一个很好的例子就是Devise controllers

这有一个sessions_controller,它基本上允许您CRUD (Create Read Update Destroy) 会话。这是使用控制器的正确方法。

您的实现似乎正在处理用户,而不是会话,因此您最好使用users_controller来修复它:

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def new
      @user = User.new
   end

   def create
      @user = User.new
      @user.save
   end
end

话虽如此,您似乎可能会解决问题,以便您可以使用User来构建新会话。

我想最好记住,你必须确保你能够欣赏到适合你应用的良好结构