2017-02-01 73 views
0

这样的IM发送从视图参数去另一个控制器访问PARAM通过渲染sended另一个控制器:模板

<%= render template: 'dishes/new', :id => @restaurant.id %> 

的观点,这是我的其他控制器的看法:

def new 
    @dish = Dish.new 
    @id = params[:id] 
    end 

    def create 
    @dish = Dish.new(dish_params) 

    respond_to do |format| 
     if @dish.save 
     format.html { redirect_to @restaurant, notice: 'dish was successfully created.' } 
     format.json { render action: 'show', status: :created, location: :restaurant } 
     else 
     format.html { render action: 'show', location: :restaurant } 
     format.json { render json: @restaurant.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

private 
    def dish_params 
    params.require(:dish).permit(:avatar, :name, :description, [:id]) 
    end 

,这是我的看法谁调用形式:

#new.html.erb 
<h1>Add a new dish</h1> 

<%= render 'dishes/dish_form' %> 

那么这里就是形式:

<%= form_for @dish, :url => { :controller => "dishes", action_name => "create" } do |f| %> 
    <div class="field"> 
    <%= f.label :dish_name %> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %> 
    <%= f.text_field :description %> 
    </div> 
    <div class="field"> 
    <%= f.label :image %> 
    <%= f.file_field :avatar %> 
    </div> 
    <div class="actions"> 
    <%= f.submit 'Add new dish' %> 
    </div> 
<% end %> 

,但是当我试图挽救它,我得到这个错误: error

+1

在你的控制器中没有行动'show' –

+0

是的我知道我会在稍后解决这个问题,问题进入那里是因为没有餐厅ID – imjustaguy

+0

您在'create'动作中调用'@ restaurant',但未定义'@ restaurant'。 –

回答

0

我认为你的问题出现在你期待你的render template: 'dishes/new'打你的DishesController。当您调用渲染时,这并不是什么情况。

你正在做的是告诉rails加载到你当前的视图模板'dishes/new',并且你正在传递'dishes/new'一个变量,它可以在渲染时访问。您没有向控制器发送参数。

如果你想保持当前的设置,你可以使它调整一些。

我打算假设您的Dish模型属于Restaurant,因此具有restaurant_id作为列。如果这是真的,那么你可以在你的表单中添加一个隐藏字段,名为restaurant_id,并在控制器中更新允许的参数,以允许在餐具上设置餐厅ID。

您的形式是这样的:

<%= form_for @dish, :url => { :controller => "dishes", action_name => "create" } do |f| %> 
    <%= f.hidden_field :restaurant_id, value: id %> 
    ... 
<% end %> 

你在你的控制器允许PARAMS应该是这样的:

def dish_params 
    params.require(:dish).permit(:avatar, :name, :description, :restaurant_id) 
end 

你可以得到关于如何在轨渲染工作here

更多信息
+0

这就是我做和工作!但我使用此行 '<%= f.hidden_​​field:restaurant_id,value:params [id]%>' 因为我已经获得了参数,我尝试在创建中放入'@id = params [:id]' Dishes的控制器并使用'<%= f.hidden_​​field:restaurant_id,value:@id%>'但没有用,它只能在第一个 – imjustaguy

0

错误是说,你的控制器命名的餐馆没有名为“秀”的动作。

一个解决方案是将名为“Show”的Action添加到餐馆控制器。

另一种选择可能是您实际创建了您想要的动作,但是您将其命名为“Show”以外的其他选项。

+0

是的,但它进入其他,因为它没有检测到即时通讯发送的餐厅ID呈现 – imjustaguy

相关问题