【问题标题】:Issues with Rails 3.1 API with Query String to Create action on Mac OSX Mountain Lion在 Mac OSX Mountain Lion 上使用查询字符串创建操作的 Rails 3.1 API 问题
【发布时间】:2012-06-27 13:54:52
【问题描述】:

您好,我已经被这个问题困扰了一段时间,非常感谢您的帮助。我正在编写一个 API 以允许像浏览器查询字符串或智能手机这样的外部源在表单中输入一些模型用户信息并点击用户创建操作以将数据写入数据库。请告诉我我在下面的代码中做错了什么。

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

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

为什么会这样?如何在 Users Controller Create 操作中编写上面的代码,以便处理这两种情况?

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

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

UsersController.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,但它不起作用。

定义远程创建 @user = User.create(name: params[:name], email: params[:email], password: params[:password], 位置:参数 [:位置],日期:参数 [:日期]) 如果@user.save 会话[:uid] = @user.id 重定向到Thanks_path,注意:“欢迎#{@user.name}” 别的 重定向到根路径 结尾 结束

谢谢!

【问题讨论】:

    标签: ruby-on-rails api params


    【解决方案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]
    ...
    

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      相关资源
      最近更新 更多