如何将参数传递给通过CSS显示的表单部分?

mar*_*ion 5 ruby-on-rails ruby-on-rails-4

所以我的表单部分加载到我的div id="secondary",在第一页加载时隐藏.

当用户点击带有被调用类的按钮时toggleSidebar,_form.html.erb会显示该按钮.

update当用户没有像这样登录时,我已覆盖部分以显示新表单(即使被按下):

<%= simple_form_for(Post.new, html: {class: 'form-horizontal' }) do |f| %>  
Run Code Online (Sandbox Code Playgroud)

与看起来像这样的常规版本相反,并且包含在if同一部分的语句中:

<% if current_user and current_user.has_any_role? :editor, :admin %>
    <%= simple_form_for(@post, html: {class: 'form-horizontal' }) do |f| %> 
Run Code Online (Sandbox Code Playgroud)

真正的问题是在我看来,当有人去的时候Update,这就是当用户注销时会发生的事情:

 <%= link_to "Update", "#", class: "togglesidebar" %>
Run Code Online (Sandbox Code Playgroud)

这是完美的,它执行CSS并完美地显示空表单部分.

但是,当用户登录时,我希望它parent_id: @post在执行侧边栏切换时发送参数.

这是它在普通new_post_path视图中的外观(即非侧边栏新帖子视图):

<% if current_user %>                                    
     <%= link_to "Update", new_post_path(parent_id: @post) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这就是我的PostController#New样子:

  def new
    @post = Post.new(parent_id: params[:parent_id])
  end
Run Code Online (Sandbox Code Playgroud)

我如何通过常规非new_post_path版本中的参数传递,或者以另一种方式解决这个问题?

小智 5

您可以使用辅助方法.

只需浏览到'app'文件夹下的'helper'目录,然后创建一个类似于[name] _helper.rb的文件

在此文件中,通过[name] Helper创建一个模块,并在此模块中声明您的帮助方法.

rails自动需要此模块.

一个小例子可能对你有帮助.

app/helper目录下的link_helper.rb中的代码

module LinkHelper

  def populate_link(link1, link2, parameter)
    if current_user
      public_send(link2, parameter)
    else
      link1
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

视图中的代码是

<%= link_to 'update', populate_link('#', 'new_requirement_path',parameter: 33) %>
Run Code Online (Sandbox Code Playgroud)