Ruby on rails 如何在RoR中将字符串属性呈现为URL
下面是一个RoR教程,我正在构建一个基本的书签应用程序 我有两种型号,Ruby on rails 如何在RoR中将字符串属性呈现为URL,ruby-on-rails,ruby,erb,Ruby On Rails,Ruby,Erb,下面是一个RoR教程,我正在构建一个基本的书签应用程序 我有两种型号,topic和bookmark 书签具有url属性。url属性在我的主题#show中呈现良好,但为纯文本。当我试图将其呈现为链接时,它没有正确链接到url 如何将其呈现为超链接 我试过这个 <%= @topic.bookmarks.each do |bookmark| %> <a href="#{bookmark.url}">bookmark.url</a> <% end %>
topic
和bookmark
书签具有url
属性。url
属性在我的主题#show
中呈现良好,但为纯文本。当我试图将其呈现为链接时,它没有正确链接到url
如何将其呈现为超链接
我试过这个
<%= @topic.bookmarks.each do |bookmark| %>
<a href="#{bookmark.url}">bookmark.url</a>
<% end %>
结束
我的书签控制器
类BookmarksController def index
@topics = Topic.all
end
def new
@topic = Topic.new
end
def show
@topic = Topic.find(params[:id])
end
def create
@topic = Topic.new(params.require(:topic).permit(:name))
if @topic.save
redirect_to @topic
else
render :new
end
end
def create
@topic = Topic.find(params[:topic_id])
@bookmarks = @topic.bookmarks
@bookmark = @topic.bookmarks.build(params.require(:bookmark).permit(:url, :topic_id))
@bookmark.topic = @topic
@new_bookmark = Bookmark.new
if @bookmark.save
flash[:notice] = "Bookmark was saved"
redirect_to @topic
else
flash[:error] = "There was an error, please try again later"
redirect_to @topic
end
end
def destroy
@topic = Topic.find(params[:topic_id])
@bookmark = Bookmark.find(params[:id])
@bookmark.topic = @topic
if @bookmark.destroy
flash[:notice] = "Bookmark was destroyed successfully"
redirect_to [@topic]
else
flash[:error] = "There was an error, please try again later"
end
end
结束
这些是我的迁移文件
class CreateTopics < ActiveRecord::Migration
def change
create_table :topics do |t|
t.string :name
t.timestamps
end
end
end
class CreateBookmarks < ActiveRecord::Migration
def change
create_table :bookmarks do |t|
t.string :url
t.references :topic, index: true
t.timestamps
end
end
end
在主题#show
<%= form_for [@topic, @topic.bookmarks.new] do |f| %>
<div class="col-md-5">
<div class="form-group">
<%= f.text_field :url, placeholder: "Enter bookmark url", class: 'form-control' %>
</div>
<%= f.submit "save", class: 'form-control' %>
</div>
<% end %>
您是否尝试使用帮助器链接到
您是否尝试使用帮助器链接到
除非字符串位于ERB块内,否则ERB不会插入字符串(
)
也就是说,在您的情况下,以下方法可行:
<a href="<%= bookmark.url %>">bookmark.url</a>
清洁的解决方案是使用另一个答案中提到的link_to
。我只是认为理解为什么原始解决方案不起作用很重要。ERB不会插入字符串,除非它们位于ERB块内(
)
也就是说,在您的情况下,以下方法可行:
<a href="<%= bookmark.url %>">bookmark.url</a>
清洁的解决方案是使用另一个答案中提到的link_to
。我只是认为理解原始解决方案不起作用的原因很重要。您可以使用链接到助手方法:
<%= @topic.bookmarks.each do |bookmark| %>
<%= link_to bookmark.url, bookmark.url %>
<% end %>
更多信息您可以使用链接到
助手方法:
<%= @topic.bookmarks.each do |bookmark| %>
<%= link_to bookmark.url, bookmark.url %>
<% end %>
更多信息这是另一个问题。假设您有一个带有有效URL的书签对象,link\u to
应该可以正常工作。我使用它是因为从其他角度看,我所有的链接,或者在上面代码的例子中,一个按钮,都将以“name”而不是链接名呈现。嗯。。对我发布的代码就是一个例子;link_to
的第一个参数是在输出中显示为链接文本的内容“名字”只是一个占位符。是的,我知道。但在我意识到我必须在“https://”前面加上前缀之前,有另一个用户在我的问题上下文中给了我代码!我的问题的答案到处都是。所以我想说清楚,以防其他人有问题!再次感谢你!那是另一个问题。假设您有一个带有有效URL的书签对象,link\u to
应该可以正常工作。我使用它是因为从其他角度看,我所有的链接,或者在上面代码的例子中,一个按钮,都将以“name”而不是链接名呈现。嗯。。对我发布的代码就是一个例子;link_to
的第一个参数是在输出中显示为链接文本的内容“名字”只是一个占位符。是的,我知道。但在我意识到我必须在“https://”前面加上前缀之前,有另一个用户在我的问题上下文中给了我代码!我的问题的答案到处都是。所以我想说清楚,以防其他人有问题!再次感谢你!我输入了
,但出现了一个路由错误-没有与[GET]匹配的路由“/topics/www.google.com”
您应该检查bookmark.url的内容。尝试添加
并检查控制台输出。这与
相同吗?因为字符串被呈现为纯文本。我输入了
,但出现了路由错误-没有与[GET]匹配的路由“/topics/www.google.com”
您应该检查bookmark.url的内容。尝试添加
并检查控制台输出。这与
相同吗?因为字符串被呈现为纯文本。我得到了错误没有路由匹配[GET]“/topics/www.google.com”
。只是在问题中添加了它@deventhusist您需要确保使用http://
前缀保存URL,否则URL将被视为相对于服务器的根。谢谢!如果您不介意的话,最后一件事是——如何在新选项卡中打开目标?这个的助手等价物是什么?指向
帮助程序的链接\u接受散列作为最后一个参数,因此您提供的任何键值对都将在输出中转换为attribute=“…”,因此我猜您可以执行
我得到错误没有路由匹配[GET]“/topics/www.google.com”
。只是在问题中添加了它@deventhusist您需要确保使用http://
前缀保存URL,否则URL将被视为相对于服务器的根。谢谢!如果您不介意的话,最后一件事是——如何在新选项卡中打开目标?这个的助手等价物是什么?指向
帮助程序的链接\u接受散列作为最后一个参数,因此您提供的任何键值对都将在输出中转换为attribute=“…”,因此我猜您可以执行