我想在Client控制器视图中从以下链接传递param 哈希是@client,我想传递@ client.user_id,如果我把(:id => @ client.user_id)我不能在另一个控制器中获取get:id我要通过这个参数。我该怎么办 ?有没有办法做到这一点?(两个控制器是Client和Estate,我想将param从Client视图传递给Estate controllers create方法。这里没有资源嵌套!)
<%= link_to "New Property", new_estate_path(:key => @client.first.user_id) %>
创建行动
def create
# @estate = Estate.new(params[:estate])
if current_user.Company.nil?
@estate = current_user.estates.build(params[:estate])
else
serve = User.find(params[:key])
debugger
@estate = serve.estates.build(params[:estate])
#@estate.user_id = user_id
debugger
end
respond_to do |format|
if @estate.save
if @estate.Mgmt.nil?
EstateMailer.company_confirmation(@estate).deliver
end
format.html { redirect_to @estate, notice: 'Estate was successfully created.' }
format.json { render json: @estate, status: :created, location: @estate }
else
format.html { render action: "new" }
format.json { render json: @estate.errors, status: :unprocessable_entity }
end
end
end
答案 0 :(得分:1)
您在此处粘贴的代码应该有效:
<%= link_to "New Property", new_estate_path(:id => @client.user_id) %>
我认为问题是,您期望create
方法中的参数,但它实际上是new
方法。
如果您正在寻找create
方法。你可以做到
<%= link_to "New Property", estates_path(:id => @client.user_id), :method => :post %>
但这不是用于POST
行动的正确方法。正确的解决方案是使用button_to
。
<%= button_to "New Property", estates_path(:id => @client.user_id), :method => :post %>
link_to
默认为GET
,button_to
默认为POST
,因为这些是他们的主要用法。如果您希望他们执行除默认操作之外的其他操作,则可以覆盖:method
。
答案 1 :(得分:0)
只需这样做
<%= link_to "New Property", new_estate_path(user_id: @client.user_id) %>
在您的控制器中:
params[:user_id]
您的问题是create
操作是POST
而不是GET
。 link_to
只允许GET
次操作。
答案 2 :(得分:0)
我在所有操作之外的控制器中创建了类变量。 @@ key,并在新的操作中分配了@@ key,来自params的user_id,以及create action中的这个@@ key。我不知道它是否是正确的方法。但它就像一个魅力!