我正在使用static_pages控制器来提供所有静态页面内容。我希望能够将参数传递给此静态页面内容,以便为登录和消息弹出窗口打开几个模式框。
root 'static_pages#home'
我该怎么做?
答案 0 :(得分:3)
如果存在某些参数,您可以使用Javascript在视图中执行此操作。
例如,在home.html.erb
中public class MyActivity extends ActionBarActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.YOUR_LAYOUT);
...
Button myFirstButton = (Button) findViewById(R.id.YOUR_FIRST_BUTTON);
myFirstButton.setOnClickListener(this);
Button mySecondButton = (Button) findViewById(R.id.YOUR_SECOND_BUTTON);
mySecondButton.setOnClickListener(this);
...
}
...
@Override
public void onClick(View v) {
Button b = (Button) v;
switch(b.getId()) {
case R.id.YOUR_FIRST_BUTTON:
// Do something
break;
case R.id.YOUR_SECOND_BUTTON:
// Do something
break;
...
}
}
...
}
然后只需将您的参数添加到查询字符串中:
<% if params[:your_param] == true %>
<script type="text/javascript">
// fire modal
</script>
<% end %>
无需修改路线文件。模态与视图相关,那么为什么不将逻辑保留在视图中呢?
就你的评论关于条件重定向而言,听起来像是控制器的工作。您也可以访问控制器中的参数,因此您可以根据传递给操作的参数进行重定向。
答案 1 :(得分:2)
使用routes.rb
的一种方法是:
# config/routes.rb
get 'posts/:id(/:opt1(/:opt2(/:opt3)))' => 'posts#show'
然后调试视图中的参数
# app/views/posts/show.html.erb
<%= params %>
如果网址为posts/1/A/B/C
,则会显示:
{"controller"=>"posts", "action"=>"show", "id"=>"1"
"opt1"=>"A", "opt2"=>"B", "opt3"=>"C"}
路线中的括号是可选的,并被视为路线非括号部分的参数。