将值从视图传递到控制器轨道

时间:2013-12-02 20:29:15

标签: ruby-on-rails ruby ruby-on-rails-4

背景:我有一个控制器 - 食谱,它生成我在数据库中的所有食谱,我可以点击一个来查看某个食谱的详细信息。在某个食谱视图中,我还传递了此食谱收到的所有评论。在评论信息下面,我可以对这个食谱做出新的评论。

这是一个问题:我当然有配方ID ----- @ recipe.id。当我填写所有评论信息并单击“提交”按钮时,此表单将发布到另一个控制器 - 评论。但我只是不知道如何将此页面中的食谱ID传递给Comments控制器。

食谱控制器:

def show
  #For getting the ingredient info from ingredient set
  @ingredientset=IngredientSet.where("recipeid=?",set_recipe.id)

  @ingredients = Array.new()
  i=0

  @ingredientset.each do |set|
    @ingredients[i]=Ingredient.find(set.ingredientid)
    i+=1
  end

食谱信息查看:(我只显示发表评论的部分)

<!--for adding a new comment-->
<div id="add_comment">    
<%= form_for(@comment) do |f| %>

<% hidden_field .....%> 
<!--Here I want to pass the @recipe.id value into the comment controller-->
<!--But I dont know should I use hidden_field or something else-->
<!--I was .net MVC developer, so I only know something like @html.hiddenfor() or @ViewBag.xxx stuff-->

<div class="field">
  <%= f.label :comment %><br>
  <%= f.text_field :comment %>
</div>
<div class="actions">
  <%= f.submit %>
</div>
<% end %>
</div>

另外我不知道如何在评论控制器中获取值,因为我在轨道上的ruby中是全新的。

这是评论控制器:

def create
@comment = Comment.new(params[:comment])
@comment.recipeid = params[:recipeid])
end

非常感谢!

1 个答案:

答案 0 :(得分:0)

在您的情况下,它听起来像hidden_field标签是您想要的。

因此,在您的表单中,您需要添加:

f.hidden_field :recipeid, <value>

就个人而言,如果我使用hidden_field标记,我会寻找另一种方法来执行此操作,因为在表单提交之前可以在DOM中轻松修改这些标记。我想看看你的控制器本身是否有办法做到这一点。