我对rails和我的第一个应用程序编码相当新。只是无法弄清楚如何在我的控制器中定位以下内容。
控制器
def index
@tool = Tool.find(params[:id])
@favorites = current_user.favorites
@tools = Tool.where(user_id: current_user).order("created_at DESC")
@user = current_user
end
索引视图
%h2 My Favorite Tools
- @favorites.each do |tool|
= image_tag tool.cover_filename.url
%h2= link_to tool.title, tool
%p= tool.subtitle
%p= @tool.impressionist_count
%p= link_to @tool.get_upvotes.size, like_tool_path(@tool), method: :get
%p= link_to "Edit", edit_tool_path(tool)
%p
http://ocubit.com/tools/
= @tool.id
%p= time_ago_in_words(tool.created_at)
%h2 My Tools
- @tools.each do |tool|
= image_tag tool.cover_filename.url
%h2= link_to tool.title, tool
%p= tool.subtitle
%p= @tool.impressionist_count
%p= link_to "Edit", edit_tool_path(tool)
%p
http://ocubit.com/tools/
= @tool.id
%p= time_ago_in_words(tool.created_at)
= link_to "View Your Profile", '/users/'+@user.id.to_s
-if @user.use_gravatar?
= image_tag gravatar_for @user
- else
= image_tag @user.avatar_filename.url
%h1= @user.username
= link_to "Edit", edit_user_registration_path
如果我在浏览器中运行它,则会出现以下错误:
ActiveRecord::RecordNotFound in ToolsController#index
Couldn't find Tool with 'id'=
我已将控制器更改为(测试)
@tool = Tool.find(1)
这是有效的,所以问题必须存在。我根本无法弄明白。
在此先感谢您的帮助!
答案 0 :(得分:1)
归因于params[:id]
等于nil
。尝试打开此URL,然后将代码更改为:
# open this URL to pass parameter tool_id
http://localhost:3000/favorites?tool_id=1
# in view
<%= link_to "Favorites", favorites_path(tool_id: 1) %>
# controller
def index
@tool = Tool.find(params[:tool_id])
end
答案 1 :(得分:1)
他们的关键是你的索引控制器中没有params [:id]。删除此行: @tool = Tool.find(params [:id])
而不是@tool在视图中仅使用'工具'
答案 2 :(得分:1)
你实际上不需要这一行:
@tool = Tool.find(params [:id])
如果您在索引视图中,则需要显示所有工具,而不仅仅是一个。那将是:show view。你在索引视图中没有params [:id],你没有在url中指明它。
所以:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="sample">
<div ng-controller="samplecontroller">
<table>
<tr ng-repeat="value in values">
<td>{{value.name}}<td>
<td ng-class="{'test-false': value.booleanField !== 'true'}">{{value.booleanField}}</td>
</tr>
</table>
</div>
</body>
答案 3 :(得分:1)
在此之前已经有很多正确答案的正确答案,但我想多做一些,然后给你解决方案。
事实上是什么function scrollBanner() {
var scrollPos = window.scrollY;
if (scrollPos <= 400) {
[].forEach.call(
document.querySelectorAll('.img-paralax, .img-paralax2'),
function(node) {
node.style.transform = "translateY(" + (-scrollPos/3) +"px" + ")";
var text = node.querySelector('h1');
text.style.transform = "translateY(" + (-scrollPos/3) +"px" + ")";
text.style.opacity = 1 - scrollPos/400;
}
);
}
}
是的,它将从您的URL获取ID ..
让我们说你有你的broswer
@tool = Tool.find(params[:id])
这样你就可以获得身份证参数。
这里的优点是,你在索引上...每次你去索引“网站”(准确的索引视图),在你的网址上你会看到类似
的内容http://localhost:3000/tool/1
这就是为什么你得到这个错误“URL上没有ID”
但ruby on rails就像任何其他语言一样,你需要理解它,而DAMM ruby就是那个......而且对于ruby来说...... ttp://localhost:3000/tools
这个小'的意思是你想要看到你的所有工具,所以不需要发送一个ID,另一方面你SHOW会显示你的一个通行费,给你网址Tools != Tool
,或者换句话说,您将看到ID = 1
事实上,你想要的控制器索引是什么,以显示你的所有工具..
@tools = Tool.all
或与你有关系的东西current_user和收藏列表