我开始学习Rails,我正面临一个问题,我认为这个问题非常简单,但我找不到答案.
我有一个电影目录,索引页面显示它显示几个列,我需要将其中两个作为链接.此链接将再次重新显示索引页面,但按所选条件排序.
到目前为止,我只添加了一个链接如下:
%th= link_to 'Movie Title', root_path
Run Code Online (Sandbox Code Playgroud)
但是我无法发送URL参数,因此我可以在控制器中获取它并执行排序.实际控制器如下:
def index
@movies = Movie.all
end
Run Code Online (Sandbox Code Playgroud)
我想,如果我能在控制器中获得一个参数,那么使用"if"语句就可以完成这项工作.我想象一个这样的URL,其中"1"表示按第一个标准排序:
http://www.mysite/1
Run Code Online (Sandbox Code Playgroud)
我看到了这样的解决方案,但我想这不是一个好的选择.请指教.
<%= link_to "Link Title", something__path(:param1 => "value1", :param2 => "value2") %>
Run Code Online (Sandbox Code Playgroud)
我将非常感谢有关如何修改视图和控制器的任何建议.我已经搜索了几个解决方案,但我很难理解解决方案.也许有更好的方法来实现这一目标.如果是这样,那么我准备好听.
尊敬的
Jorge Maldonado
这归结为RESTful路径设计.它实际上取决于您尝试传递给控制器并在URL中表示的字段类型.
将路径视为资源的访问路径非常重要.
一般来说,有两种方法可以表示您想要的数据:
/path/to/resource/:resourceId.使用此格式表示资源本身的属性.
/path/to/resource?queryKey=queryVal.将此格式用于数据的元数据和操作.
你最初的猜测实际上非常接近.你想要的是这样的东西:
在你的控制器中:
movie = Movie.find(params[:id])
Run Code Online (Sandbox Code Playgroud)
在你看来:
<%= link_to 'View Movie', movie %>
Run Code Online (Sandbox Code Playgroud)
在引擎盖下,Rails正在执行一些魔术,将其变成看起来与问题中的代码非常相似的东西.最好让Rails自己执行这个魔法,因为它可以让以后更容易改变.
另外,为了清楚起见,使用路径变量(而不是查询参数)是适合您情况的最佳方法.您可以在此处的文档中阅读有关路由的更多信息:http: //guides.rubyonrails.org/routing.html
回答这个问题(我还没有足够的回复评论):
感谢您的回复.它工作正常.我还有一个问题.这样的链接是什么意思?最后一个参数(
:id)用于什么?link_to "Movie Title", movies_path(:sort => "title"), :id => "title_header"
在link_to标记上,向生成的HTML标记:id添加id字段.
这个:
link_to "Articles", articles_path, id: "news", class: "article"
产生: <a href="/articles" class="article" id="news">Articles</a>
请参阅此处的Rails文档:http:
//apidock.com/rails/ActionView/Helpers/UrlHelper/link_to
(搜索"CSS的类和ID很容易生成:")
小智 0
您可以做的就是添加上面提到的参数。比在你的控制器中你可以做的
def index
if params[:param_1] == "param_one"
@movies = Movie.where(id: 'param_one')
else
@movies = Movie.all
end
end
Run Code Online (Sandbox Code Playgroud)
您的解决方案可能像这样 =link_to 'xxx', movie_path(:param_one=> "p1", :param_two=>"p2") 将调用 movie_controller.rb 的索引操作。
| 归档时间: |
|
| 查看次数: |
12059 次 |
| 最近记录: |