0

嗨,我已经在这个问题上停留了一段时间,希望能得到您的帮助。我正在编写一个 API 以允许外部源(如浏览器查询字符串或智能手机)在表单中输入一些模型用户信息并点击用户创建操作以将数据写入数据库。请告诉我我在下面的代码中做错了什么。

我还观察到,如果我有像 @user = User.new(params[:user]) 这样的代码,那么这种方法只有在用户在表单中输入他们的数据时才有效。

如果我有诸如 @user = User.new(name: params[:name], location: params[:location], password = params[:password], email: params[:email]) 之类的代码,那么代码仅适用于查询字符串条目,但不适用于查询字符串和常规表单提交。

为什么会这样,我如何在用户控制器创建操作中编写上面的代码,以便它处理这两种情况?

使用的 URL:localhost:3000/users/create?name=John&&email=john@email.com&&password=secret&&location=SanFrancisco&date=06122012

日期是字符串类型,但它不显示在数据库中。为什么?其他一切都可以。

用户控制器.rb

定义创建

@user = User.new(params[:user])

if @user.save
session[:uid] = @user.id
redirect_to thanks_path, notice: "Welcome #{@user.name}!"
else
redirect_to root_path
end

结尾

新用户表单:

                <%=u.text_field :name, placeholder: "Name"%><br>
                <%=u.text_field :email, placeholder: "Email"%><br>
        <%=u.password_field :password, placeholder: "Password"%><br>
        <%=u.text_field :location, placeholder: "City"%><br> 
                <%=u.text_field :date, placeholder: "Date"%><br>

        <%if params[:partner_id]%>

        <%=u.hidden_field :partner_id, value: params[:partner_id]%>

        <%end%>

               <button class="btn btn-large btn-primary">Enter</button>

我还尝试创建一个名为 remotecreate 的单独方法,用于为常规 Web 表单以外的其他内容创建用户。我在查询字符串中输入了 remotecreate,但它不起作用。

def remotecreate @user = User.create(name: params[:name], email: params[:email], password: params[:password], location: params[:location], date: params[:date]) if @user.save session[:uid] = @user.id redirect_to Thanks_path,注意:“Welcome #{@user.name}” else redirect_to root_path end end

谢谢!

4

1 回答 1

1

在你的控制器中..

def create
  @user = User.new

  if params[:user] && params[:user][:email]  # Form submission
     @user = User.new(params[:user])

  else      # Url-inlined submission
    @user = User.new
    @user.attributes = params
  end

没有测试@user.attributes = params,但认为它应该可以工作。你总能做到

@user.email = params[:email]
@user.something = params[:somethings]
...
于 2012-06-26T12:48:58.627 回答