在routes.rb上为Ruby on Rails的root设置可选参数

时间:2015-05-09 16:09:47

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

我正在使用static_pages控制器来提供所有静态页面内容。我希望能够将参数传递给此静态页面内容,以便为登录和消息弹出窗口打开几个模式框。

root 'static_pages#home'

我该怎么做?

2 个答案:

答案 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"}

路线中的括号是可选的,并被视为路线非括号部分的参数。