我试图通过发布的用户名获取用户的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
答案 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对象执行相同的操作。