0

我想在客户端控制器的视图中从以下链接传递参数并且哈希是@client,我想传递@client.user_id,如果我输入(:id => @client.user_id)我无法获取:id 在我要传递此参数的另一个控制器 Estate 中。我应该怎么办 ?有没有办法做到这一点?(两个控制器是 Client 和 Estate,我想将参数从 Client 视图传递给 Estate 控制器的 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
4

3 回答 3

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默认为GETbutton_to默认为POST,因为这些是它们的主要用途。:method如果您希望他们执行默认操作以外的其他操作,您可以覆盖。

于 2013-06-28T18:55:36.867 回答
0

只需这样做

<%= link_to "New Property", new_estate_path(user_id: @client.user_id) %>

在您的控制器中:

params[:user_id]

您的问题是该create动作POST不是 a GET。将link_to只允许GET操作。

于 2013-06-28T18:46:57.260 回答
0

我在所有操作之外的控制器中创建了类变量。@@key,并在新操作中为 @@key 分配了通过参数传入的 user_id,并在 create 操作中分配了此 @@key。我不知道这是否是正确的做法。但它就像一个魅力!

于 2013-07-02T15:09:14.967 回答