设计宝石。第一个用户工作不正常

时间:2016-02-23 13:47:57

标签: ruby-on-rails devise

所以我的应用中有几个用户。我有一个控制器方法,允许用户查看其他用户喜欢的帖子。一切正常,直到我尝试查看第一个用户喜欢的帖子。我收到一个错误:未定义的方法`comment_path'。我也只能用我的用户名登录,但不能用我的电子邮件登录。所有这些错误仅与我的应用中的第一个用户有关。可能有什么不对? 的 Posts_controller.rb:

def liked
 @user = User.find_by_username(params[:username])
 @posts = @user.find_liked_items
 render action: :index
end

Index.html.erb

<div id="posts"> 
<% @posts.each do |post| %>
    <div class="box">
        <p style="color: #bbb">by <%= link_to post.user.username, liked_posts_path(username: post.user.username) %></p>
        <p id="text"><%= link_to post do %><%= truncate(post.content, length:400){ link_to ' read full', post, {:style=>'color:#bbb'} } %><% end %></p>
        ...
    </div>
<% end %>

的routes.rb

resources :posts do
 collection do
   get :recent
   get :hot
   get :liked
 end
 member do
   put 'like', to: "posts#like"
   put 'unlike', to: "posts#unlike"
 end
 resources :comments do
   collection do
     get :fresh
     get :hot
   end
   member do
     put 'like', to: "comments#like"
     put 'unlike', to: "comments#unlike"
   end
 end
end

root to: "posts#hot"

3 个答案:

答案 0 :(得分:0)

在视图文件中,尝试更改此内容,

<%= link_to post.user.username, liked_posts_path(post.user.id) %>

在喜欢的方法更改代码中,

@user = User.find_by_username(params[:id])

看看这是否有效,由于性能的原因,传递ID而不是其他属性总是更好的做法。

答案 1 :(得分:0)

我删除了我的数据库,现在正在工作

答案 2 :(得分:0)

在设计中,默认的身份验证机制是电子邮件。根据设计文档,您可以在application_controller.rb中指定自定义身份验证,如:

  def configure_permitted_parameters
   devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
   devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
   devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
  end

另见:How To: Allow users to sign in using their username or email address

所以另一个问题似乎不是设计错误,你可以用更多细节来指定它。