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]
放在菜肴的创建控制器中,并使用
但是不起作用,它只对第一个起作用