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)