Ruby on rails 访问render:template发送的另一个控制器中的参数

Ruby on rails 访问render:template发送的另一个控制器中的参数,ruby-on-rails,ruby,controller,render,Ruby On Rails,Ruby,Controller,Render,因此,我将一个参数从一个视图发送到另一个控制器的视图 <%= render template: 'dishes/new', :id => @restaurant.id %> 这就是我的观点,我称之为表单: #new.html.erb <h1>Add a new dish</h1> <%= render 'dishes/dish_form' %> <%= form_for @dish, :url => { :controlle

因此,我将一个参数从一个视图发送到另一个控制器的视图

<%= render template: 'dishes/new', :id => @restaurant.id %>
这就是我的观点,我称之为表单:

#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 %>
#new.html.erb
加一道新菜
下面是表格:

#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 %>
{:controller=>“disks”,action_name=>“create”}do | f |%>
但当我试图保存它时,我得到了以下错误:

错误是,名为Restories的控制器没有名为“Show”的操作

一种解决方案是将名为“Show”的操作添加到餐厅控制器


另一个选项可能是您实际创建了所需的操作,但您将其命名为“Show”以外的其他名称。

我认为,当您希望
渲染模板:“disks/new”
点击
dishesconner
时,问题就出现了。这不是调用渲染时发生的情况

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

如果您想保持当前设置,您可以通过一些调整使其工作

我将假设您的
菜肴
模型属于
餐厅
,因此将
餐厅id
列为一列。如果这是真的,那么您可以向菜品表单中添加一个名为
餐厅id
的隐藏字段,并更新控制器中允许的参数,以允许在菜品上设置餐厅id

您的表单如下所示:

{:controller=>“disks”,action_name=>“create”}do | f |%>
...
控制器中允许的参数如下所示:

def dish\u参数
参数要求(:菜肴).许可(:化身,:名称,:描述,:餐厅id)
结束

您可以获得有关rails渲染如何工作的更多信息

action
show
no exist in the controllery是的,我知道我稍后会解决这个问题,问题出现在那里,因为在
创建
操作中没有餐厅i您呼叫
@restaurant
,但
@restaurant
未定义。您没有遇到我的问题:/,我意识到这个问题,但现在不是我的问题,它缺少我在渲染中发送的id。您可以显示给我们,您定义了一个
@restaurant
变量,以便在
create
操作中调用
@restaurant
?是的,但是它进入了else,因为它没有检测到我在渲染中发送的餐厅id,这就是我的工作!但是我使用这一行
因为我已经得到了参数,我试着将
@id=params[:id]
放在菜肴的创建控制器中,并使用
但是不起作用,它只对第一个起作用