从用户名或公司名称获取列标识

时间:2014-10-15 02:56:11

标签: ruby-on-rails

我试图通过发布的用户名获取用户的id,并通过id获取业务的id,并在数据库中存储id。我可以通过find_by查找它们并将查询存储在变量中,然后使用.id获取id。不确定它们是否正确可能不是这样。

module Api
  module V1
    class UsersController < ApplicationController
      respond_to :json

      def new
        @subscriptions = Subscriptions.new
      end
      def create

        user = User.find_by_username(params[:username_id])

        business = Business.find_by_name(params[:business_id])

        @subscriptions = Subscriptions.new(user.id business.id)

          respond_to do |format|
            if @subscriptions.save
              format.json { render json: "Status:Created"}
            else
              format.json { render json: @user.errors, status: :unprocessable_entity }
            end
          end
      end
      private
        def user_params
          params.require(:subscriptions).permit(:username_id, :business_id)
        end
    end
  end
end     

1 个答案:

答案 0 :(得分:0)

您的代码中有多处错误。让我们假设您提供的信息是正确的,您需要做的事情是相当简单的。

首先,以下行不正确Ruby。您的参数之间没有昏迷,new接受哈希。

@subscriptions = Subscriptions.new(user.id business.id)

你需要传递这样的属性:

@subscriptions = Subscriptions.new(user_id: user.id, business: business.id)

通常你会想要使用strong_parameters,但是因为在这种情况下你是在new方法中定义键,所以你可以一起跳过strong_parameters。如果你传递哈希对象,而不是像我上面给你看到的单个键,你只需要它。

您已经定义了一个名为user_params的方法,但您没有使用它,并且您正在保存订阅对象。如果您使用的是strong_parameters,则需要重命名该方法并使用它。

@subscriptions = Subscriptions.new(subscription_params)
def subscription_params
  # notice :subscription in singular, and not in plural
  params.require(:subscription).permit(:user_id, :business_id)
end

如果params没有映射到您的数据库对象,这可能仍然无效,正如@meager在他的评论中所暗示的那样。所以你想检查params散列。我会在其内容中引发错误,看看你收到了什么参数。

raise params.to_yaml

最后,如果您使用的是Rails 4,则必须使用正确的查找程序。不推荐使用find_by_col_name。请改用find_by(attribute: value)。所以:

user = User.find_by(username_id: params[:username_id])

为Business对象执行相同的操作。